熊猫-合并两个具有相同列名的数据框,并在一个单元格中合并两个数据框的信息

时间:2020-03-01 03:00:10

标签: python pandas dataframe merge

第一列中有两个具有相同列名和相同ID的数据框。在第一个数据帧中,我有int信息,在第二个数据帧中,我有str。

以下是它们的外观示例:

ID    Cat1    Cat2    Cat3  
1     1        1       0 
2     0        2       1 
3     0        0       5


ID    Cat1    Cat2    Cat3 
1     text    text    text 
2     text    text    text
3     text    text    text

我想将它们合并到一个DataFrame中,并将两个Data Frames的信息合并到同一单元格中。因此结果将如下所示:

ID    Cat1      Cat2         Cat3  
1    1, text   1, text     0, text 
2    0, text   2, text     1, text  
3    0, text   0, text     5, text

我尝试使用pandas.combine,但无法正常工作。

是否可以解决此任务?

3 个答案:

答案 0 :(得分:2)

filter列出要合并的列;添加','并将相关列从int转换为string。最后在列轴上重新连接到df.ID

Merged_Dfs = (df.filter(like='Cat').astype(str)
             .add(', ')
             .add(df1.filter(like='Cat').astype(str)))

pd.concat([df.ID,
           Merged_Dfs
           ],axis=1)

    ID  Cat1    Cat2    Cat3
0   1   1, text 1, text 0, text
1   2   0, text 2, text 1, text
2   3   0, text 0, text 5, text

或者,您也可以使用pandas insert将df.ID挂接到合并的Dfs作为第一列

Merged_Dfs.insert(0,'ID',df.ID)

print(Merged_Dfs)

答案 1 :(得分:1)

您可以使用combine来连接两个数据框,而使用pd.Series.str.cat来连接每个数据框的元素:

df1.set_index('ID').astype(str).combine(df2.set_index('ID'), lambda x,y: x.str.cat(y, sep=', '))

这需要将索引设置为ID,并将数字作为字符串。

输出:

       Cat1     Cat2     Cat3
ID                           
1   1, text  1, text  0, text
2   0, text  2, text  1, text
3   0, text  0, text  5, text

答案 2 :(得分:1)

您可以使用pandas.DataFrame.conbine合并两个数据帧。但是,您需要将正确的函数传递给属性func


merge = lambda x,y: [x,y]
df1.combine(df2, func = lambda s1,s2: s1.combine(s2, func = merge))

请注意,此函数的变量为pandas.Series。因此,调用pandas.Series.combine以获得正确的结果。

相关问题