合并熊猫数据帧:保留行冗余,同时删除列冗余

时间:2019-10-16 09:51:28

标签: python pandas

我有三个数据框:

df1:
col1    col2    col3
name1   human   experID1
name2   mouse   experID2
name3   human   experID3
name4   mouse   experID4
name5   human   experID5

df2:
col1    col2    col4    col6
name1   human   experID1    output1
name2   human   experID2    output2
name3   human   experID3    output3
name10  human   experID10   output4

df3:
col1    col3    col7    col8
name1   happy   human   ref1
name2   sad mouse   ref2
name3   angry   human   ref3

我想将它们结合起来

  1. 第1列中的行必须保持不变,即,由于name1出现在col1中的每个数据帧中,因此它应该在最终数据帧中出现3次。

  2. 我只想合并这些列,以便:如果该列已经存在,则将数据添加到该列;否则,添加一个新列。

  3. 用'-'

  4. 填充丢失的单元格

所以输出将是:

col1    col2    col3    col4    col6    col7    col8
name1   human   experID1    -   -   -   -
name2   mouse   experID2    -   -   -   -
name3   human   experID3    -   -   -   -
name4   mouse   experID4    -   -   -   -
name5   human   experID5    -   -   -   -
name1   human   -   experID1    output1 -   -
name2   human   -   experID2    output2 -   -
name3   human   -   experID3    output3 -   -
name10  human   -   experID10   output4 -   -
name1   -   happy   -   -   human   ref1
name2   -   sad -   -   mouse   ref2
name3   -   angry   -   -   human   ref3

在显示我尝试过的内容方面: 我有三个数据帧df1,df2,df3

正在尝试使用合并,合并,添加这样的内容:

final_df = pd.DataFrame()
list_of_df = [df1,df2,df3]

#method 1
result = pd.concat(list_of_df)

#method 2
for each_df in list_of_dfs:
#this is where it started to go wrong

我尝试了this页面上的所有方法,但是我不认为它们会执行我希望它们执行的操作(让我知道是否要在此处添加此页面的代码,我只是想因为这是错误的,所以指向链接比较整洁。

从逻辑上讲,我想我想将每个数据帧一个接一个地“追加”到主数据帧,因此行保持不变。如果有人可以显示示例,则只是合并列而不合并我不了解的行。

2 个答案:

答案 0 :(得分:4)

似乎,您只想添加

df1.append(df2, sort=False).append(df3, sort=False).fillna('-')

答案 1 :(得分:1)

使用pd.concat

pd.concat([df1,df2,df3],sort=False).fillna('-')

     col1   col2      col3       col4     col6   col7  col8
0   name1  human  experID1          -        -      -     -
1   name2  mouse  experID2          -        -      -     -
2   name3  human  experID3          -        -      -     -
3   name4  mouse  experID4          -        -      -     -
4   name5  human  experID5          -        -      -     -
0   name1  human         -   experID1  output1      -     -
1   name2  human         -   experID2  output2      -     -
2   name3  human         -   experID3  output3      -     -
3  name10  human         -  experID10  output4      -     -
0   name1      -     happy          -        -  human  ref1
1   name2      -       sad          -        -  mouse  ref2
2   name3      -     angry          -        -  human  ref3