第一列中有两个具有相同列名和相同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,但无法正常工作。
是否可以解决此任务?
答案 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
以获得正确的结果。