首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫:数据融合与比较

熊猫:数据融合与比较
EN

Stack Overflow用户
提问于 2020-06-08 06:26:30
回答 3查看 109关注 0票数 2

我有3个Dataframes,我想通过"label“合并或连接,然后能够比较所有列

发展基金的例子如下:

df1

代码语言:javascript
复制
Label,col1,col2,col3
NF1,1,1,6
NF2,3,2,8
NF3,4,5,4
NF4,5,7,2
NF5,6,2,2

df2

代码语言:javascript
复制
Label,col1,col1,col3
NF1,8,4,5
NF2,4,7,8
NF3,9,7,8

df3

代码语言:javascript
复制
Label,col1,col1,col3
NF1,2,8,8
NF2,6,2,0
NF3,2,2,5
NF4,2,4,9
NF5,2,5,8

我想看到的是类似于

代码语言:javascript
复制
Label,df1_col1,df2_col1,df_col1,df1_col2,df2_col2,df3_col2,df1_col3,df2_col3,df_col3
NF1,1,8,2,1,4,8,6,5,8
NF2,3,4,6,2,7,2,8,8,0
NF3,4,9,2,5,7,2,4,8,5
NF4,5,,2,7,,4,2,,9
NF5,6,,2,2,,5,2,,8

但我想建议如何使比较更加可读性。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-08 06:30:57

concat与DataFrames列表一起使用,为前缀添加参数keys,并按列名进行排序:

代码语言:javascript
复制
dfs = [df1, df2, df3]
k = ('df1','df2','df3')
df = (pd.concat([x.set_index('Label') for x in dfs], axis=1, keys=k)
        .sort_index(axis=1, level=1)
        .rename_axis('Label')
        .reset_index())
df.columns = df.columns.map('_'.join).str.strip('_')
print (df)
  Label  df1_col1  df2_col1  df3_col1  df2_col1.1  df3_col1.1  df1_col2  \
0   NF1         1       8.0         2         4.0           8         1   
1   NF2         3       4.0         6         7.0           2         2   
2   NF3         4       9.0         2         7.0           2         5   
3   NF4         5       NaN         2         NaN           4         7   
4   NF5         6       NaN         2         NaN           5         2   

   df1_col3  df2_col3  df3_col3  
0         6       5.0         8  
1         8       8.0         0  
2         4       8.0         5  
3         2       NaN         9  
4         2       NaN         8  
票数 2
EN

Stack Overflow用户

发布于 2020-06-08 06:34:51

您可以使用df.merge

代码语言:javascript
复制
In [1965]: res = df1.merge(df2, on='Label', how='left', suffixes=('_df1', '_df2')).merge(df3, on='Label', how='left').rename(columns={'col1': 'col1_df3','col2':'col2_df3','col3':'col3_df3'})

In [1975]: res = res.reindex(sorted(res.columns), axis=1)

In [1976]: res

Out[1965]: 
  Label  col1_df1  col1_df2  col1_df3  col2_df1  col2_df2  col2_df3  col3_df1  col3_df2  col3_df3
0   NF1         1      8.00         2         1      4.00         8         6      5.00         8
1   NF2         3      4.00         6         2      7.00         2         8      8.00         0
2   NF3         4      9.00         2         5      7.00         2         4      8.00         5
3   NF4         5       nan         2         7       nan         4         2       nan         9
4   NF5         6       nan         2         2       nan         5         2       nan         8
票数 2
EN

Stack Overflow用户

发布于 2020-06-08 09:52:04

我们可以使用Pandas的加入方法,方法是将Label列设置为索引并加入数据文件:

代码语言:javascript
复制
dfs = [df1,df2,df3]
keys = ['df1','df2','df3']

#set Label as index
df1, *others = [frame.set_index("Label").add_prefix(f"{prefix}_")
                for frame,prefix in zip(dfs,keys)]

#join df1 with others
outcome = df1.join(others,how='outer').rename_axis(index='Label').reset_index()

outcome


    Label   df1_col1    df1_col2    df1_col3    df2_col1    df2_col2    df2_col3    df3_col1    df3_col2    df3_col3
0   NF1     1           1            6          8.0         4.0          5.0     2  8   8
1   NF2     3           2            8          4.0         7.0          8.0    6   2   0
2   NF3     4           5            4          9.0         7.0          8.0    2   2   5
3   NF4     5           7            2          NaN         NaN          NaN    2   4   9
4   NF5     6           2            2          NaN         NaN          NaN    2   5   8
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62256194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档