在行pandas DF上应用共享功能

时间:2016-04-06 15:07:55

标签: python pandas apply

我有以下df

Array = np.array([[87, 70, 95],
   [52, 47, 44],
   [44, 97, 94],
   [79, 36,  2]])

df_test = pd.DataFrame(Array, columns=['Apple', 'Banana', 'Tomato'],index=[['Joe', 'Steve', 'Wes', 'Jim']])

看起来像:

       Apple  Banana  Tomato
Joe       87      70      95
Steve     52      47      44
Wes       44      97      94
Jim       79      36       2

我想逐行计算每笔费用的份额,但我找不到。它必须看起来像:

df_test.apply(lambda: x/max(line),axis=2)

结果将是:

       Apple  Banana  Tomato
Joe    0.35   0.27   0.37
.        .      .      .

但我无法找到在lambda函数内计算每行最大值的方法。有人有想法吗? 提前致谢 !

1 个答案:

答案 0 :(得分:2)

你希望divsum行:

In [111]:
df_test.div(df_test.sum(axis=1), axis=0) * 100

Out[111]:
          Apple    Banana    Tomato
Joe    0.345238  0.277778  0.376984
Steve  0.363636  0.328671  0.307692
Wes    0.187234  0.412766  0.400000
Jim    0.675214  0.307692  0.017094

如果要设置精度,可以调用round

In [112]:
df_test.div(df_test.sum(axis=1), axis=0).round(2)

Out[112]:
       Apple  Banana  Tomato
Joe     0.35    0.28    0.38
Steve   0.36    0.33    0.31
Wes     0.19    0.41    0.40
Jim     0.68    0.31    0.02