下面是我的数据框:
df = pd.DataFrame({'A': ['a1', 'a1', 'a1', 'a1', 'a1', 'a1', 'a1', 'a1', 'a1', 'all', 'all', 'all', 'all', 'all', 'all', 'all', 'all', 'all'],
'B': ['b1', 'b1', 'b1', 'b2', 'b2', 'b2', 'all', 'all', 'all', 'b1', 'b1', 'b1', 'b2', 'b2', 'b2', 'all', 'all', 'all'],
'C': ['c1', 'c2', 'all', 'c1', 'c2', 'all', 'c1', 'c2', 'all', 'c1', 'c2', 'all', 'c1', 'c2', 'all', 'c1', 'c2', 'all'],
'D': ['D1', 'D2', 'all', 'D1', 'D2', 'all', 'D1', 'D2', 'all', 'D1', 'D2', 'all', 'D1', 'D2', 'all', 'D1', 'D2', 'all'],
'E': ['E1', 'E1', 'E1', 'E2', 'E2', 'E2', 'all', 'all', 'all', 'E1', 'E1', 'E1', 'E2', 'E2', 'E2', 'all', 'all', 'all'],
'F': [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9]})
之后pivot,以下是输出:
In [226]: df.pivot(index=['A', 'B', 'C'], columns=['E', 'D'])
Out[226]:
F (NO) (NO)
E E1 E1 E1 E2 E2 E2 all all all
D D1 D2 all D1 D2 all D1 D2 all
A B C
a1 all all NaN NaN NaN NaN NaN NaN NaN NaN 9.0
a1 all c1 NaN NaN NaN NaN NaN NaN 7.0 NaN NaN -> (NO)
a1 all c2 NaN NaN NaN NaN NaN NaN NaN 8.0 NaN -> (NO)
a1 b1 all NaN NaN 3.0 NaN NaN NaN NaN NaN NaN
a1 b1 c1 1.0 NaN NaN NaN NaN NaN NaN NaN NaN
a1 b1 c2 NaN 2.0 NaN NaN NaN NaN NaN NaN NaN
a1 b2 all NaN NaN NaN NaN NaN 6.0 NaN NaN NaN
a1 b2 c1 NaN NaN NaN 4.0 NaN NaN NaN NaN NaN
a1 b2 c2 NaN NaN NaN NaN 5.0 NaN NaN NaN NaN
all all all NaN NaN NaN NaN NaN NaN NaN NaN 9.0
我需要删除我指出的行和列(NO)。
逻辑是:从最里面的索引开始,即,C我需要保留all以向后方式出现的行和列。因此,具有索引a1 all all、a1 b1 all和a1 b2 all的行将all all all被保留,因为all它们以向后的方式发生。
需要删除具有索引a1 all c1、a1 all c2、all all c1、等的行,因为从 向后开始不存在连续性。all b1 allallC
同样的逻辑也适用于列。从 开始D,需要删除索引为 的列D1 all,D2 all剩下的就可以了。
慕桂英4014372
相关分类