pandas - python 中的汇总数据框

summarizing data frame in pandas - python

df = pd.DataFrame({'a':['y',NaN,'y',NaN,NaN,'x','x','y',NaN],'b':[NaN,'x',NaN,'y','x',NaN,NaN,NaN,'y'],'d':[1,0,0,1,1,1,0,1,0]})

我正在尝试使用 sum 总结此数据框。我认为 df.groupby(['a','b']).aggregate(sum) 会起作用,但它 returns 是一个空的 Series

我怎样才能达到这个结果?

   a  b
x  1  1
y  2  1
import numpy as np
import pandas as pd
NaN = np.nan

df = pd.DataFrame(
    {'a':['y',NaN,'y',NaN,NaN,'x','x','y',NaN],
     'b':[NaN,'x',NaN,'y','x',NaN,NaN,NaN,'y'],
     'd':[32,12,55,98,23,11,9,91,3]})

melted = pd.melt(df, id_vars=['d'], value_vars=['a', 'b'])
result = pd.pivot_table(melted, values='d', index=['value'], columns=['variable'], 
                        aggfunc=np.median)
print(result)

产量

variable     a     b
value               
x         10.0  17.5
y         55.0  50.5

解释

Melting the DataFramemelted = pd.melt(df, value_vars=['a', 'b']) 产生

     d variable value
0   32        a     y
1   12        a   NaN
2   55        a     y
3   98        a   NaN
4   23        a   NaN
5   11        a     x
6    9        a     x
7   91        a     y
8    3        a   NaN
9   32        b   NaN
10  12        b     x
11  55        b   NaN
12  98        b     y
13  23        b     x
14  11        b   NaN
15   9        b   NaN
16  91        b   NaN
17   3        b     y

现在我们可以使用 pd.pivot_table 来透视和聚合 d 值:

result = pd.pivot_table(melted, values='d', index=['value'], columns=['variable'], 
                        aggfunc=np.median)

请注意,如果您希望以多种方式汇总数据,aggfunc 可以采用函数列表,例如 [np.sum, np.median, np.min, np.max, np.std]