如何在数据帧中添加一个新列,该列划分多个列并查找最大值



这可能是真正简单的解决方案,但我是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

谢谢

您可以通过分步切列来单独划分 df,然后取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

您可以尝试如下操作

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

最新更新