繁体   English   中英

Pandas - 合并两个具有相同列名的 DataFrame,并将两个 DataFrame 的信息合并到一个单元格中

[英]Pandas - merge two DataFrames with Identical Column Names and combine information of two DataFrames in one cell

我在第一列中有两个具有相同列名和相同 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

我想将它们合并到一个数据帧中,并将两个数据帧的信息合并到相同的单元格中。 所以结果应该是这样的:

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,但它无法正常工作。

有没有可能解决这个任务?

过滤出要合并的列; 添加 ', ' 并将相关列从 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)

您可以使用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

您可以使用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以获得正确的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM