基于来自其他数据帧的各种列构建数据帧

时间:2021-06-29 05:44:27

标签: python pandas dataframe

我有各种看起来像这样的数据框:

df1
    ID    Number   Score   Time   Result
    a     45       0.3     2535   0.9
    b     46       0.5     345    0.8
    c     34       0.94    346    0.6
    d     36       1       356    0.7

df2 
ID Image Video
a   0     0
b   0     0
c   1     0
d   0     1
e   1     0
f   1     0

df3
ID Length
a   35
b   57
c   75
d   57
e   85
f   48

我怎样才能将它们合并成这样:

ID   Time   Image   Video   Length  Score
a    2535   0        0       35      0.3
b    345    0        0       57      0.5
c    346    1        0       75      0.94
d    356    0        1       57      1

我的想法是使用 pd.merge (on="ID")(这只会给我从 a 到 d 的行,对吗?)然后删除不必要的列。但是最后我如何移动 Score 呢?还有其他方法吗?

1 个答案:

答案 0 :(得分:1)

链接多个 merge,然后将 Score 设置为最后一列:

df = df1.merge(df2, on='ID').merge(df3, on='ID')
df['Score'] = df.pop('Score')

或者如果有 list of DataFrames 使用:

from functools import reduce

dfs = [df1, df2, df3]
df = reduce(lambda df1,df2: pd.merge(df1,df2,on='ID'), dfs)
cols = df.columns.drop(['Score']).tolist() + ['Score']
df = df[cols]
相关问题