【问题标题】:Apply a share function on row pandas DF在行 pandas DF 上应用共享功能
【发布时间】:2016-07-27 02:14:38
【问题描述】:

我有以下 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 函数中计算每行最大值的方法。有人有想法吗? 提前致谢 !

【问题讨论】:

    标签: python pandas apply


    【解决方案1】:

    您想通过sum 逐行发送div

    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
    

    【讨论】:

    • 你能解释一下 div 函数到底是做什么的吗?如果我理解,它不仅仅是划分,它是映射+划分对吗?
    • 所以它将 df 与 sum 的结果相除,同时发生的是它正在对齐索引和列,您可以查看我的其他答案以了解其工作原理:stackoverflow.com/questions/29954263/…
    猜你喜欢
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2016-04-30
    • 2021-07-12
    相关资源
    最近更新 更多