【发布时间】:2022-11-17 14:20:56
【问题描述】:
我有一个包含以下数据的 csv:
"id","Title","Author(s)","Format","Size","Tags"
"1","Horse","John","KFX","122","Classic"
"1","Horse","John","KFX","122","Drama"
"1","Horse","John","KFX","122","Horror"
"1","Horse","John","AZW3","122","Classic"
"1","Horse","John","AZW3","122","Drama"
"1","Horse","John","AZW3","122","Horror"
"1","Horse","John","PDF","122","Classic"
"1","Horse","John","PDF","122","Drama"
"1","Horse","John","PDF","122","Horror"
"2","Banana","Anna","AZW3","312","SciFi"
"2","Banana","Julia","AZW3","312","SciFi"
"2","Banana","Anna","PDF","312","SciFi"
"2","Banana","Julia","PDF","312","SciFi"
我想,使用熊猫,得到这个:
"id","Title","Author(s)","Format","Size","Tags"
"1","Horse","John","KFX","122","Classic, Drama, Horror"
"2","Banana","Anna, Julia","AZW3","312","SciFi"
它将根据列表的值排除行的位置 KFX, AZW3, PDF
如果它有 KFX,则排除其他两个。 如果没有 KFX,请检查列表中的下一个 AZW3,如果存在,则排除 PDF(如果存在)
然后,汇总作者和标签。
我正在寻找这样做的方法,但到目前为止没有成功。 我试图按 id 分组,然后根据列表(KFX、AZW3、PDF)排除行,然后聚合。
我能够使用以下方法进行聚合:
df.groupby(['id']).agg(lambda x: ','.join(x))
但是有两个问题: 首先,它将包括包含所有“格式”的行。 其次,它也会重复其他列 “1、1、1”、“马、马、马”、“约翰、约翰、约翰”
等等。
【问题讨论】: