熊猫枢轴多索引列

乔治·海勒

我想透视一个多索引数据名人堂,但失败了:

 Shape of passed values is (3, 4), indices imply (3, 2)

编码:

import pandas as pd

df = pd.DataFrame({
    'foo': [1,2,3], 'bar':[4,5,6], 'dt':['2020-01-01', '2020-01-01', '2020-01-02'], 'cat':['a', 'b', 'b']
})
df = df.groupby(['dt', 'cat']).describe().loc[:, pd.IndexSlice[:, ['count', '50%']]].reset_index()
columns_of_interest = sorted(df.drop(['dt', 'cat'], axis=1, level=0).columns.get_level_values(0).unique())
df.pivot(index='dt', columns='cat', values=columns_of_interest)

如何解决?

编辑

预期结果:

从:

dt  cat     foo     bar
            count   50%     count   50%
0   2020-01-01  a   1.0     1.0     1.0     4.0
1   2020-01-01  b   1.0     2.0     1.0     5.0
2   2020-01-02  b   1.0     3.0     1.0     6.0

至:

value       foo         bar

cat     a       b       a       b
dt

0
1
2

编辑2

基本上我想计算:

v = 'count'
df['foo'][v].reset_index().pivot(index='dt', columns='cat', values = v)

每个列[foo, bar]和每个聚合,[count, 50%]并返回单个合并结果。

即:

for c in columns_of_interest:
    print(c)    
    for piv in piv_values:
        print(piv)
        r = df[c][piv].reset_index().pivot(index='dt', columns='cat', values = piv)
        display(r)

1)我只是不确定如何重新组合结果,以及2)如何找到整洁的解决方案。

解决方法

一个相当巧妙的解决方法是将级别展平:

df.columns = ['_'.join(col).strip() for col in df.columns.values]
columns_of_interest = df.columns
df.reset_index().pivot(index='dt', columns='cat', values=columns_of_interest)
我想要一片T骨牛排

IIUC,您可以unstackgroupby(no reset_index)之后使用

df = pd.DataFrame({
    'foo': [1,2,3], 'bar':[4,5,6], 
    'dt':['2020-01-01', '2020-01-01', '2020-01-02'], 'cat':['a', 'b', 'b']
})
df_ = df.groupby(['dt', 'cat']).describe()\
        .loc[:, pd.IndexSlice[:, ['count', '50%']]]\
        .unstack() # unstack instead of reset_index

print (df_)
             foo                  bar               
           count       50%      count       50%     
cat            a    b    a    b     a    b    a    b
dt                                                  
2020-01-01   1.0  1.0  1.0  2.0   1.0  1.0  4.0  5.0
2020-01-02   NaN  1.0  NaN  3.0   NaN  1.0  NaN  6.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章