【问题标题】:Pandas Pivot Table Filtering Based on CriteriaPandas 基于条件的数据透视表过滤
【发布时间】:2018-09-07 18:26:20
【问题描述】:

所以我有一个 pivot_table,基本上是一个多级 df,我想通过几个参数进行过滤。

列数据类型:

Report          object
Owner           object
Description     object
TimeToRun       object
FacilityName    object
Base Report     object

pd 函数:

pv=pd.pivot_table(test, index = ['TimeToRun'], columns = ['FacilityName'], values = ['Base Report'], aggfunc='count', fill_value=0)

pv.columns

MultiIndex(levels=[[u'Base Report'], [u'Roseville', u'Sacramento', u'South Sacramento']],
       labels=[[0, 0, 0], [0, 1, 2]],
       names=[None, u'FacName'])

我的事情是我想通过二级值过滤生成的 df,我想过滤它以便索引任何大于 2 的值。到目前为止,这是我的解决方案,但这在动态情况下不起作用,第二级 [u'Roseville', u'Sacramento', u'South Sacramento'] 中的值不同(列的长度)。

这是我的查询:

query = pv[(pv[pv.columns[0]]>2) | (pv[pv.columns[1]]>2)| (pv[pv.columns[2]]>2)]

这是在 excel 中呈现的 pivot_table 的样子:

    Base Report 
FacilityName        Santa Clara Santa Teresa
TimeToRun       
2018-03-28 07:00:00    4    0
2018-03-28 07:01:00    4    0
2018-03-28 07:02:00    6    0
2018-03-28 07:03:00    5    0
2018-03-28 09:05:00    0    3
2018-03-28 09:15:00    0    6
2018-03-28 14:45:00    3    0
2018-03-28 17:15:00    0    5
2018-03-28 19:10:00    0    3
2018-03-28 19:15:00    0    4

我相信有更好的方法,请告诉我如何。谢谢

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    想通了:

    pv[pv[('Base Report')]>2].dropna(axis=0,how='all')
    

    您也可以将其应用到位或直接退回...不过谢谢!

    结果如下,注意空格为0值:

    None    Base Report Base Report
    FacilityName    Santa Clara Santa Teresa
    TimeToRun       
    2018-03-29 07:00:00 4.0 
    2018-03-29 07:01:00 4.0 
    2018-03-29 07:02:00 6.0 
    2018-03-29 07:03:00 5.0 
    2018-03-29 09:05:00     3.0
    2018-03-29 09:15:00     6.0
    2018-03-29 14:45:00 3.0 
    2018-03-29 17:15:00     5.0
    2018-03-29 19:10:00     3.0
    2018-03-29 19:15:00     4.0
    

    【讨论】:

      【解决方案2】:

      如何遍历列并删除不符合计数条件的列?

      for col in pv.columns:
          if not any(pv[col] > 2):
              pv.drop(col,axis=1,inplace=True)
      

      【讨论】:

      • 您在这里所做的是删除整个列。此外,这不会导致查询 df,它会导致修补索引。例如,如果从上述数据中,我们删除了 Santa Clara 的“3-28-2018 19:15:.00”,因为它不符合标准,那么这也会删除符合标准的 Santa Teresa。
      猜你喜欢
      • 2018-03-31
      • 2022-10-17
      • 1970-01-01
      • 2016-07-08
      • 2023-02-24
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      相关资源
      最近更新 更多