我有以下数据框:
payment_method_id payment_plan_days plan_list_price actual_amount_paid date
msno
YyO+tlZtAXYXoZhNr3Vg3+dfVQvrBVGO8j1mfqe4ZHc= 41 30 129 129 2015-01-01
AZtu6Wl0gPojrEQYB8Q3vBSmE2wnZ3hi1FbK1rQQ0A4= 41 30 149 149 2015-01-01
UkDFI97Qb6+s2LWcijVVv4rMAsORbVDT2wNXF0aVbns= 41 30 129 129 2015-01-02
关键是" msno",我需要找出大多数" msno"仅在不同日期使用一个payment_method_id。
所以我尝试按" msno"," payment_method_id",
进行分组 transactions.groupby(['msno', 'payment_method_id']).count()
但出现错误:KeyError:' msno'
使用其他字段进行分组工作正常,例如:
transactions.groupby(['payment_plan_days', 'payment_method_id']).count()
然后对于msno
,我甚至可以使用groupby level=0
transactions.groupby(level=0)
但我不能将包含第一列的两个级别分组。
这就是它在transactions.columns
Index(['payment_method_id', 'payment_plan_days', 'plan_list_price',
'actual_amount_paid', 'date']
dtype='object')
有什么建议吗?
答案 0 :(得分:1)
我认为将index转换为列需要reset_index
,因为您的pandas版本低于0.20.1
:
传递给 DataFrame.groupby()的字符串,因为 by 参数现在可以引用列名或索引级名称。以前,只能引用列名。这样可以轻松地按列和索引级别进行分组。
transactions.reset_index().groupby(['msno', 'payment_method_id']).count()
因此升级后您的代码应该可以正常工作:
transactions.groupby(['msno', 'payment_method_id']).count()
注意: