我希望在转动DataFrame之后对以下DataFrame 进行子集化(从模拟中记录):
import pandas as pd
df = pd.DataFrame(
{'runid' : [26 , 26 , 26 , 26 , 26 , 26 , 27 , 27 , 27 , 27 , 27 , 27 ],
'time' : [0 , 1 , 1 , 3 , 5 , 7 , 0 , 0 , 0 , 2 , 4 , 5 ],
'process': ['p1', 'p2', 'p2', 'p1', 'p1', 'p2', 'p1', 'p1', 'p2', 'p2', 'p2', 'p1'],
'state' : ['a' , 'a' , 'b' , 'b' , 'c' , 'c' , 'a' , 'b' , 'a' , 'b' , 'c' , 'c' ]
})
然后转动DataFrame:
data = pd.pivot_table(df, index=['runid', 'process'], columns=['state'], values=['time'])
输出:
time
state a b c
runid process
26 p1 0 3 5
p2 1 1 7
27 p1 0 0 5
p2 0 2 4
如何对此透视数据框进行子集,以便选择runid 26和a和b列(这样我就可以从具有runid 26的所有进程中减去a b并存储这些值进行分析)。
答案 0 :(得分:1)
您可以使用pd.IndexSlice
对象使语法更好,然后只需loc
。
>>> idx = pd.IndexSlice
>>> data.loc[idx[26, :], idx[:, ['a', 'b']]]
time
state a b
runid process
26 p1 0 3
p2 1 1