这是我的代码:
frst_df = df.drop(columns=["Comment"]).groupby(['source'], as_index=False).agg('first')
cmnt_df = df.groupby(['source'], as_index=False)['Comment'].apply(', '.join)
merge_df = pd.merge(frst_df, cmnt_df , on='source')
我希望这是可以理解的。
我有一个很大的数据框,其中有一列“源”。这是数据框的主要列。现在,对于“评论”列,我想加入与“源”的值相对应的所有评论。数据框中还有大约50个其他列。我只想从与“源”相对应的所有值中只选择第一个元素。
我编写的代码可以正常工作,但是数据框很大,创建两个单独的数据框然后合并它们需要花费大量时间。有什么更好的方法吗?
答案 0 :(得分:1)
您可以按字典使用GroupBy.agg
-所有列仅按Comment
和join
的顺序进行汇总:
df = pd.DataFrame({
'Comment':list('abcdef'),
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,4],
'source':list('aaabbc')
})
d = dict.fromkeys(df.columns.difference(['source']), 'first')
d['Comment'] = ', '.join
merge_df = df.groupby('source', as_index=False).agg(d)
print (merge_df)
source B C Comment D E
0 a 4 7 a, b, c 1 5
1 b 5 4 d, e 7 9
2 c 4 3 f 0 4
答案 1 :(得分:0)
这是另一种可能的解决方案。
df['Comment'] = df.groupby('source')['Comment'].transform(lambda x: ','.join(x))
df = df.groupby('source').first()