如何在dataframe中添加一个新列,它将多个列分开并找到最大值

时间:2016-01-19 17:03:57

标签: python-3.x pandas dataframe

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

由于

2 个答案:

答案 0 :(得分:0)

您可以尝试以下内容

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

答案 1 :(得分:0)

您可以通过逐步切片来分割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