所以我有一个pivot_table,基本上是一个多级df,我想通过几个参数进行过滤。
colum dtypes:
Report object
Owner object
Description object
TimeToRun object
FacilityName object
Base Report object
pd func:
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)]
这里是pivot_table的外观,在excel中呈现:
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
我确信有更好的方法,请告诉我如何。谢谢
答案 0 :(得分:0)
如何迭代列并删除那些不符合计数标准的列?
for col in pv.columns:
if not any(pv[col] > 2):
pv.drop(col,axis=1,inplace=True)
答案 1 :(得分:0)
想出来:
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