如何引用pandas数据框的索引字段?

时间:2017-10-08 17:47:48

标签: python pandas dataframe pandas-groupby

我有以下数据框:

    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')

有什么建议吗?

1 个答案:

答案 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()

注意:

countsize之间的区别是count省略NaN s而size则没有。