Pandas объединить несколько сводных таблиц - PullRequest
2 голосов
/ 20 февраля 2020

Предположим, у меня есть df1, piv1 и piv2 ниже:

df1 = pd.DataFrame({'R': [1, 2], 'S': ['s1', 's2'], 'G1': ['g1a', 'g1b'], 'G2': ['g2a', 'g2b']})

df1
    R   S   G1  G2
0   1   s1  g1a g2a
1   2   s2  g1b g2b

piv1 = df1.pivot_table(index=(['S']), columns=(['G1']), aggfunc=({'R': 'mean'}))

piv1
        R
G1  g1a g1b
S       
s1  1.0 NaN
s2  NaN 2.0

piv2 = df1.pivot_table(index=(['S']), columns=(['G2']), aggfunc=({'R': 'mean'}))

piv2
        R
G2  g2a g2b
S       
s1  1.0 NaN
s2  NaN 2.0

Вместо piv1 и piv2 я пытаюсь сделать piv3, что похож на ниже. Любые идеи? В идеале я хотел бы создать piv3 непосредственно из df1 (т.е. не нужно создавать piv1 и piv2 и затем объединять их).

piv3
S   g1a  g1b  g2a  g2b
s1  1.0  NaN  1.0  NaN
s2  NaN  2.0  NaN  2.0

Ответы [ 3 ]

4 голосов
/ 20 февраля 2020

IIU C

s=df1.melt(['R','S']).groupby(['S','value']).R.mean().unstack()
Out[63]: 
value  g1a  g1b  g2a  g2b
S                        
s1     1.0  NaN  1.0  NaN
s2     NaN  2.0  NaN  2.0
4 голосов
/ 20 февраля 2020

df.melt и pivot_table:

df1.melt(['S','R']).pivot_table(index='S',columns='value',values='R').rename_axis(None)

value  g1a  g1b  g2a  g2b
s1     1.0  NaN  1.0  NaN
s2     NaN  2.0  NaN  2.0
0 голосов
/ 20 февраля 2020

Наверное, не самый элегантный ответ:

piv3 = piv1.copy()
piv3[piv2.columns] = piv2

Out[17]: 
      R               
G1  g1a  g1b  g2a  g2b
S                     
s1  1.0  NaN  1.0  NaN
s2  NaN  2.0  NaN  2.0
...