将两个CSV文件与另一个用逗号分隔的文件中的映射值合并

2024-10-01 15:43:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是:

我有两个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合并成一个字符串,并用逗号分隔(不是逐行)。我该怎么做?提前谢谢!你知道吗


Tags: 文件csvidmergedproductattributesccccaaaa
1条回答
网友
1楼 · 发布于 2024-10-01 15:43:11

这是一种方法。你知道吗

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)

解释

  • 按Id对df2属性进行分组,并聚合到列表中。你知道吗
  • 通过pd.Series.map映射到df1中的列。你知道吗

相关问题 更多 >

    热门问题