【问题标题】:how to add a new column in dataframe which divides multiple columns and finds the maximum value如何在数据框中添加一个新列来划分多列并找到最大值
【发布时间】:2016-01-19 17:03:57
【问题描述】:

这可能是真正简单的解决方案,但我是 python 3 的新手,我有一个包含多列的数据框。我想向现有数据框添加一个新列 - 它执行以下计算,即

New Column = Max((Column A/Column B), (Column C/Column D), (Column E/Column F))

我可以根据以下代码做一个最大值,但想检查我如何做 div 连同它。

df['Max'] = df[['Column A','Column B','Column C', 'Column D', 'Column E', 'Column F']].max(axis=1)

Column A Column B Column C Column D Column E Column F  Max
3600     36000     22       11      3200     3200     36000
2300     2300      13       26      1100     1200     2300
1300     13000     15       33      1000     1000     13000

谢谢

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    您可以通过按步骤对列进行切片,然后使用max

    In [105]:
    df['Max'] = df.ix[:,df.columns[::2]].div(df.ix[:,df.columns[1::2]].values, axis=1).max(axis=1)
    df
    
    Out[105]:
       Column A  Column B  Column C  Column D  Column E  Column F  Max
    0      3600     36000        22        11      3200      3200    2
    1      2300      2300        13        26      1100      1200    1
    2      1300     13000        15        33      1000      1000    1
    

    这里是中间值:

    In [108]:
    df.ix[:,df.columns[::2]].div(df.ix[:,df.columns[1::2]].values, axis=1)
    
    Out[108]:
       Column A  Column C  Column E
    0       0.1  2.000000  1.000000
    1       1.0  0.500000  0.916667
    2       0.1  0.454545  1.000000
    

    【讨论】:

      【解决方案2】:

      您可以尝试如下方式

      df['Max'] = df.apply(lambda v: max(v['A'] / v['B'].astype(float), v['C'] / V['D'].astype(float), v['E'] / v['F'].astype(float)), axis=1)
      

      例子

      In [14]: df
      Out[14]:
         A   B  C   D   E   F
      0  1  11  1  11  12  98
      1  2  22  2  22  67   1
      2  3  33  3  33  23   4
      3  4  44  4  44  11  10
      
      In [15]: df['Max'] = df.apply(lambda v: max(v['A'] / v['B'].astype(float), v['C'] /
      v['D'].astype(float), v['E'] / v['F'].astype(float)), axis=1)
      In [16]: df
      Out[16]:
         A   B  C   D   E   F        Max
      0  1  11  1  11  12  98   0.122449
      1  2  22  2  22  67   1  67.000000
      2  3  33  3  33  23   4   5.750000
      3  4  44  4  44  11  10   1.100000
      

      【讨论】:

        猜你喜欢
        • 2021-03-28
        • 2021-05-15
        • 2014-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-11
        • 1970-01-01
        • 2020-12-20
        相关资源
        最近更新 更多