gpt4 book ai didi

python - 使用pivot_table后对pandas数据框进行子集化

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:32 25 4
gpt4 key购买 nike

我想在旋转 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

如何对这个透视 DataFrame 进行子集化,以便选择 runid 26 以及 a 和 b 列(这样我就可以为所有 runid 26 的进程从 b 中减去 a 并存储这些值以供分析)。

最佳答案

您可以使用 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

关于python - 使用pivot_table后对pandas数据框进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42472970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com