用元组键将熊猫Groupby转换为(index,column)数据框

时间:2020-03-02 17:11:05

标签: python pandas

我需要在groupby之后创建一个数据框。 groupby汇总每个(元组)键的摘要(平均值,最大值)。我需要拆分键以使用每个值的(index,column)建立一个新表。

import numpy as np
import pandas as pd
data = {
        'X':np.random.randint(0,high=10,size=100),
        'S':np.random.randint(0,high=5,size=100),
        'V': np.random.randint(0,high=10,size=100)}
    df=pd.DataFrame.from_dict(data)
    agg =df.groupby(by=['X','S'])['V'].agg(['mean','max'])
    obs = pd.DataFrame(index=df.X.unique(),columns=pd.MultiIndex.from_product([df.S.unique(),['mean','max']]))
    for idx, row in agg.iterrows():
        obs.loc[idx[0],(idx[1],'mean')] = row['mean']
        obs.loc[idx[0],(idx[1],'max')] = row['max']

我只是通过遍历行找到了方法。我认为可能会有更好的方法。

obs
Out[218]: 
         3          1             2        0            4    
      mean  max  mean  max     mean max mean max     mean max
0        5    7     3    3        1   1    6   8      4.2   8
9        2    3  6.25    9      4.2   6  7.5   8        3   3
3      NaN  NaN   NaN  NaN  3.33333   6  3.5   5  3.33333   7
1        5    9     3    9      4.5   7    0   0  4.66667   9
4     2.75    8     0    0        7   7    4   6        9   9
7        5    9     4    8  2.66667   4    4   4        4   4
6      2.5    4     7    7        7   7    4   8     7.25   9
2        5    6   NaN  NaN      3.5   5    9   9        3   3
5        4    4   8.5    9      4.5   9    6   6        8   8
8  5.66667    7     6    8        7   7    6   6      5.5   9

0 个答案:

没有答案