【问题标题】:How to refer to the index field of pandas data frame?如何引用 pandas 数据框的索引字段?
【发布时间】:2017-10-08 17:47:47
【问题描述】:

我有以下数据框:

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

有什么建议吗?

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    我认为您需要reset_index 将索引转换为列,因为您的熊猫版本低于0.20.1

    作为 by 参数传递给 DataFrame.groupby() 的字符串现在可以引用列名称或索引级别名称。以前,只能引用列名。这允许同时按列和索引级别轻松分组。

    transactions.reset_index().groupby(['msno', 'payment_method_id']).count()
    

    所以升级后你的代码应该可以正常工作了:

    transactions.groupby(['msno', 'payment_method_id']).count()
    

    注意:

    countsize 之间的区别是 count 省略 NaNs 和 size 不是。

    【讨论】:

      猜你喜欢
      • 2014-06-12
      • 2020-10-22
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      • 2013-05-09
      相关资源
      最近更新 更多