[英]Pandas Dataframe groupby one column and sum of all other columns
[英]Groupby on a column and apply function on another column but keep first element of all other columns of dataframe
这是我的代码:
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 个其他列。 我只想从与“源”对应的所有值中选择第一个元素。
我写的代码工作正常,但数据框很大,创建两个单独的数据框然后合并它们需要很多时间。 有没有更好的方法来做到这一点?
您可以通过字典使用GroupBy.agg
- 所有列都通过第一个仅通过join
Comment
聚合:
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
这是另一种可能的解决方案。
df['Comment'] = df.groupby('source')['Comment'].transform(lambda x: ','.join(x))
df = df.groupby('source').first()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.