Pandas Groupby在不同的轴上使用多个标准

cdu*_*uet 2 python pandas pandas-groupby

我有一个df像DataFrame:

      | A | B | A_ | B_ |COMMON|
--------------------------------
0     | 1 | 3 | 0  | 1  | a    |
--------------------------------
1     | 8 | 5 | 4  | 0  | a    |
--------------------------------
2     | 3 | 6 | 2  | 4  | b    |
--------------------------------
3     | 9 | 9 | 1  | 7  | b    |
Run Code Online (Sandbox Code Playgroud)

我希望将所有列XX_所有字母组合在一起A,B,...(比方说,也可以调用该组X),以及使用组COMMON.我想稍后将函数std()应用于所有分组值.

所以结果如下:

COMMON  |  A     |  B     |
---------------------------
a       |std(...)|std(...)|
---------------------------
b       |std(...)|std(...)|
Run Code Online (Sandbox Code Playgroud)

我能够使用df.groupby(['COMMMON'])一个标准和另一个标准.groupby(mapping_function, axis=1)对一个或另一个进行分组,但我如何一起使用它们?

中间步骤的另一个替代方法是连接各个列,以便我得到:

      | A | B |COMMON|
----------------------
0     | 1 | 3 |a    |
---------------------
1     | 8 | 5 |a    |
---------------------
2     | 3 | 6 |b    |
---------------------
3     | 9 | 9 |b    |
---------------------
0     | 0 | 1 |a    |
---------------------
1     | 4 | 0 |a    |
---------------------
2     | 2 | 4 |b    |
---------------------
3     | 1 | 7 |b    |
Run Code Online (Sandbox Code Playgroud)

但我也不知道该怎么做.正如您可能看到的,我并不真正关心索引.

谢谢您的帮助!

jez*_*ael 8

您可以首先通过melt删除_列名称(为了更好的性能,因为strip只有很少的值)来重新整形pivot_table:

df = (df.rename(columns=lambda x: x.strip('_'))
        .melt('COMMON')
        .pivot_table(index='COMMON',columns='variable', values='value', aggfunc='std'))

print (df)
variable         A         B
COMMON                      
a         3.593976  2.217356
b         3.593976  2.081666
Run Code Online (Sandbox Code Playgroud)

  • 好的支点:-). (2认同)

WeN*_*Ben 5

IIUC

df.melt('COMMON').assign(variable=lambda x : x['variable'].str.rstrip('_')).\
       groupby(['COMMON','variable']).value.std().unstack()
Out[18]: 
variable         A         B
COMMON                      
a         3.593976  2.217356
b         3.593976  2.081666
Run Code Online (Sandbox Code Playgroud)