gpt4 book ai didi

python - 具有多个索引的 Pandas df.pivot() 和 pd.pivot_table()

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:26 28 4
gpt4 key购买 nike

我正在尝试将具有多个索引的长格式 df 转换为宽格式 df。为什么 df_in.pivot() 失败和/或为什么 pd.pivot_table 返回带有奇怪层次索引的结果,这样我就无法访问我尝试访问的列 Actor ?

# input table
df_in = pd.DataFrame({'idx1':range(2)*4, 'idx2':['a']*4+['b']*4, 'field': ['f1']*2+['f2']*2+['f1']*2+['f2']*2, 'value': np.array(range(2)*4)*2+1})
'''
field idx1 idx2 value
0 f1 0 a 1
1 f1 1 a 3
2 f2 0 a 1
3 f2 1 a 3
4 f1 0 b 1
5 f1 1 b 3
6 f2 0 b 1
7 f2 1 b 3
'''

# want something like this
pd.DataFrame({'idx1':range(2)*2, 'idx2': ['a']*2+['b']*2, 'a':[1,3]*2, 'b':[1,3]*2})
'''
a b idx1 idx2
0 1 1 0 a
1 3 3 1 a
2 1 1 0 b
3 3 3 1 b
'''

#doesn't work => ValueError: all arrays must be same length
df_in.pivot(index=['idx1','idx2'], columns =['field'])

#doesn't work => weird hierarchical index
pd.pivot_table(df_in, index=['idx1','idx2'], columns =['field'])

'''
value
field f1 f2
idx1 idx2
0 a 1 1
b 1 1
1 a 3 3
b 3 3
'''
# doesn't work => KeyError: 'f1'
pd.pivot_table(df_in, index=['idx1','idx2'], columns =['field'])['f1']

# doesn't work => KeyError: 'f1'
pd.pivot_table(df_in, index=['idx1','idx2'], columns =['field']).reset_index()['f1']

最佳答案

要避免多级列,将值列显式指定为字符串而不是列表就足够了:

df_in.pivot_table(values='value', index=['idx1', 'idx2'], columns='field').reset_index()

#field idx1 idx2 f1 f2
#0 0 a 1 1
#1 0 b 1 1
#2 1 a 3 3
#3 1 b 3 3

如果你有多层列,你可以使用元组来访问它们,例如:

df_out = df_in.pivot_table(values=['value'], index=['idx1', 'idx2'], columns='field')

给出一个多级列的数据框,要访问f1列,你可以这样做:

df_out[('value', 'f1')]

给出:

#idx1  idx2
#0 a 1
# b 1
#1 a 3
# b 3
#Name: (value, f1), dtype: int64

关于python - 具有多个索引的 Pandas df.pivot() 和 pd.pivot_table(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42522402/

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