【问题标题】:Pandas filter pivot table by valuePandas 按值过滤数据透视表
【发布时间】:2016-07-08 14:16:03
【问题描述】:

这可能与 Pandas: Filtering pivot table rows where count is fewer than specified value 重复,但我不断收到 NaN 错误

我有一个包含订单、订单价值、客户 ID 和日期的数据框 (df):

id, date, order_count, daily_order_value

我想查看在此期间订购超过一次、三次和十次的客人的总支出。

Pnon_merch = pivot_table(dffilter, index =["guest_id"],
                         values=['ct_order','order_value'],
                         aggfunc= {'ct_order':np.sum,
                                   'order_value': [np.sum, np.mean]})

打印Pnon_merch:

                 ct_order order_value          
                  sum   mean        sum
guest_id                               
  4813            1     2020.6400   2020.64

生成一个表格,但是当我尝试时:

Pnon_merch_is1 = Pnon_merch[Pnon_merch["ct_order"]==1]

我得到了NaN的列表,

               ct_order order_value          
                  sum    mean  sum
guest_id                               
  4813            NaN    NaN   NaN


truefalse = [Pnon_merch["ct_order"]==1]

给出True/False的列表

              sum
guest_id       
    4813       True
    6517       True
    7876      False

为什么True/false会返回NaN

这个例子Filtering based on the "rows" data after creating a pivot table in python pandas 似乎只过滤索引而不是值。

groupby level = 0 也不会产生正确的结果)

【问题讨论】:

  • 是不是因为你的daily order_value 少了一个下划线?
  • 更新了您的编辑和建议@johnE,感谢您抽出宝贵时间
  • 对,但我的意思是在最上面,有代码来构造原始 df(或一个小的近似值)是很好的。否则没有人可以测试他们的代码以查看它是否有效,除非他们创建一个示例数据框,该数据框可能与您遇到的问题不同。

标签: python pandas pivot-table


【解决方案1】:

首先我会像这样重命名列(聚合后):

Pnon_merch.columns = ['ct_order_sum','order_value_mean','order_value_sum']

现在您可以这样做了:

Pnon_merch_is1 = Pnon_merch[Pnon_merch["ct_order_sum"]==1]

【讨论】:

  • @conr404,很高兴我能帮上忙 :)
  • 您获得 Pnon_merch[Pnon_merch["ct_order"]==1] 的 NA 的一个可能原因是您正在使用多索引。尝试使用 Pnon_merch[Pnon_merch[('ct_order', 'sum')]==1]。
猜你喜欢
  • 2018-03-31
  • 1970-01-01
  • 2023-02-24
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 2020-06-25
相关资源
最近更新 更多