这是我的问题:
我有两个csv文件如下:
Book1.csv
Id Product
0 aaaa
1 bbbb
2 cccc
3 dddd
Book2.csv
Id Attribute
0 aaad
0 sssd
1 fffd
1 gggd
1 cccd
2 bbbd
3 hhhd
3 bbbd
我希望合并上面的文件并获取输出文件:
Product Attributes
aaaa aaad, sssd
bbbb fffd, gggd, cccd
cccc bbbd
dddd hhhd, bbbd
我现在使用的代码是:
import pandas as pd
a = pd.read_csv("Book1.csv")
b = pd.read_csv("Book2.csv")
b = b.dropna(axis=0)
merged = a.merge(b, how='left', left_on='Id', right_on='Id' )
merged.rename(columns={
'Product': 'Product',
'Attribute': 'Attributes'}, inplace=True)
merged = merged[['Product','Attributes']]
merged.to_csv("output.csv", index=False)
我从中得到的是:
Product Attributes
aaaa aaad
aaaa sssd
bbbb fffd
bbbb gggd
bbbb cccd
cccc bbbd
dddd hhhd
dddd bbbd
正确合并所有属性和产品。但我想要的是将Attibutes合并为一个字符串并用逗号分隔(不是逐行)。我该怎么做呢?提前谢谢!
答案 0 :(得分:2)
这是一种方式。
g = df2.groupby('Id')['Attribute'].apply(', '.join)
df1['Attributes'] = df1['Id'].map(g)
<强>结果强>
Id Product Attributes
0 0 aaaa aaad, sssd
1 1 bbbb fffd, gggd, cccd
2 2 cccc bbbd
3 3 dddd hhhd, bbbd
如果您只想合并到list
,您可以使用它,但它不会很好地打印出来:
g = df2.groupby('Id')['Attribute'].apply(list)
<强>解释强>
df2
属性,列出汇总。df1
映射到pd.Series.map
中的列。