gpt4 book ai didi

python - 如何从数据框中制作数据透视表?

转载 作者:行者123 更新时间:2023-12-01 08:28:24 25 4
gpt4 key购买 nike

我有一个如下所示的数据框:

>>> df = pd.DataFrame( {'level01': [10, 20, 20, 30, 40, 50, 60], 'level02': [110, 210, 150, 310, 410, 510, 610], 'value01': [1, 0, 0, 2, 0, 0, 3], 'value02': [0, 3, 0, 1, 0, 0, 1]} )

>>> df
level01 level02 value01 value02
0 10 110 1 0
1 20 210 0 3
2 20 150 0 0
3 30 310 2 1
4 40 410 0 0
5 50 510 0 0
6 60 610 3 1

每个值列对应于其级别列。例如,df['value01'][0] 为 1,表示级别 df['level01'][0] 的值为 10。 (10级的值为1)

我想提取每个 0 的值行及其级别并制作一个数据透视表。所以,结果会是这样的:

   level, value
0 20 2
1 40 1
2 50 1
3 110 1
4 150 1
5 410 1
6 510 1

我尝试了df.pivot_table(values=df[['value01', 'value02']], index=df[['level01', 'level02']], aggfunc='count'),但是结果和我想象的大不一样。

                value01  value02
level01 level02
10 110 1 1
20 150 1 1
210 1 1
30 310 1 1
40 410 1 1
50 510 1 1
60 610 1 1

怎样才能得到我想要的结果?如果我能得到一些帮助,我将不胜感激。

最佳答案

在列中创建MultiIndex,按 stack reshape ,因此可能仅通过 query 过滤 0 值最后得到每组的计数 GroupBy.size :

s = df.columns.to_series()
df.columns = pd.MultiIndex.from_arrays(list(zip(*s.str.extract('(\D+)(\d+)').values.tolist())))
df2 = (df.stack()
.query('value == 0')
.groupby('level')
.size()
.reset_index(name='value'))

print (df2)
level value
0 20 2
1 40 1
2 50 1
3 110 1
4 150 1
5 410 1
6 510 1

如果只有 2 列,则使用 numpy.ravel 创建助手 DataFrame 的解决方案第一步:

df1 = pd.DataFrame({'level': df[['level01', 'level02']].values.ravel(),
'value': df[['value01', 'value02']].values.ravel()})

df2 = (df1.query('value == 0')
.groupby('level')
.size()
.reset_index(name='value'))

关于python - 如何从数据框中制作数据透视表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54069450/

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