我有一个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
Run Code Online (Sandbox Code Playgroud)
这就是我想要的:
Name Sid Use_Case Revenue
A xx01 Voice, SMS $10.00
B xx02 Voice $5.00
C xx03 Voice, SMS, Video $15.00
Run Code Online (Sandbox Code Playgroud)
我不想总结"收入"列的原因是因为我的表是在几个时间段内进行调整的结果,其中"收入"最终被多次列出而不是每个"Use_Case"具有不同的值.
解决这个问题的最佳方法是什么?我调查了这个groupby()
功能,但我仍然不太了解它.
jez*_*ael 29
我想你可以使用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
Run Code Online (Sandbox Code Playgroud)
评论的好主意,谢谢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
Run Code Online (Sandbox Code Playgroud)
Ami*_*ory 12
你能groupby
和apply
的list
功能:
>>> df['Use_Case'].groupby([df.Name, df.Sid, df.Revenue]).apply(list).reset_index()
Name Sid Revenue 0
0 A xx01 $10.00 [Voice, SMS]
1 B xx02 $5.00 [Voice]
2 C xx03 $15.00 [Voice, SMS, Video]
Run Code Online (Sandbox Code Playgroud)
(如果您担心重复,请使用set
代替list
。)
归档时间: |
|
查看次数: |
21870 次 |
最近记录: |