我有一个pandas数据帧,其中有几行几乎是彼此重复的,除了一个值。我的目标是将这些行合并或“合并”为单行,而无需对数值进行求和。
pandas
这是我正在使用的示例:
Name Sid Use_Case Revenue A xx01 Voice $10.00 A xx01 SMS $10.00 B xx02 Voice $5.00 C xx03 Voice $15.00 C xx03 SMS $15.00 C xx03 Video $15.00
这就是我想要的:
Name Sid Use_Case Revenue A xx01 Voice, SMS $10.00 B xx02 Voice $5.00 C xx03 Voice, SMS, Video $15.00
我不想汇总“收入”列的原因是因为我的表是在多个时间段内进行数据透视的结果,其中“收入”只是最终多次列出,而不是每个“ Use_Case”都有不同的值。
解决这个问题的最佳方法是什么?我已经研究过该groupby()功能,但是我仍然不太了解它。
groupby()
我想你可以使用groupby与和自定义功能:aggregate first', '.join
groupby
aggregate
first
', '.join
df = df.groupby('Name').agg({'Sid':'first', 'Use_Case': ', '.join, 'Revenue':'first' }).reset_index() #change column order print df[['Name','Sid','Use_Case','Revenue']] Name Sid Use_Case Revenue 0 A xx01 Voice, SMS $10.00 1 B xx02 Voice $5.00 2 C xx03 Voice, SMS, Video $15.00
来自评论的好主意,谢谢Goyo:
df = df.groupby(['Name','Sid','Revenue'])['Use_Case'].apply(', '.join).reset_index() #change column order print df[['Name','Sid','Use_Case','Revenue']] Name Sid Use_Case Revenue 0 A xx01 Voice, SMS $10.00 1 B xx02 Voice $5.00 2 C xx03 Voice, SMS, Video $15.00