我有以下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函数内计算每行最大值的方法。有人有想法吗? 提前致谢 !
答案 0 :(得分:2)
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