假设我有my_df

my_df = pd.DataFrame({'X': ['a', 'a', 'b', 'b'], 'Y1': [1, 2, 3, 4], 'Y2': [1, 2, 3, 4], 'Z': [1, 0, 1, 0]})

my_df
    X   Y1  Y2  Z
0   a   1   1   1
1   a   2   2   0
2   b   3   3   1
3   b   4   4   0


我正在寻找一种在pivot_table的每一列上使用可能具有不同条件的aggfunc的方法。例如,假设我想按X分组数据并获得平均值。对于Y1,我想应用直接的mean聚合,而对于Y2,我想应用以mean为条件的Z==1聚合。在这种情况下,输出为:

    Y1  Y2
X
a   1.5 1
b   3.5 3


如何调整以下代码以适应这种情况?

my_df.pivot_table(index = 'X', aggfunc={'Y1': 'mean', 'Y2': 'mean'})

最佳答案

如何调整以下代码以适应这种情况?


一种方法是mask Y2 wrt Z列,然后旋转

(my_df.assign(Y2=my_df['Y2'].where(my_df['Z'].eq(1)))
      .pivot_table(index = 'X', aggfunc={'Y1': 'mean', 'Y2': 'mean'}))




    Y1   Y2
X
a  1.5  1.0
b  3.5  3.0

关于python - Aggfunc中具有不同条件的Pandas数据透视表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60211951/

10-12 13:57