求两列两个和的最大值的Pandas解法?

wvmv3b1j  于 2023-02-17  发布在  其他
关注(0)|答案(2)|浏览(124)

所以我有一个数据框,它有四种颜色和数值,我想在数据框中添加一列,该列具有两列相加所得两个和的最大值。
目前为止我的解决方案是

from pandas import DataFrame
df = DataFrame(data={'text': ['a','b','c'], 'a':[1,2,3],'b':[2,3,4],'c':[5,4,2],'d':[-2,4,1]})
df['sum1'] = df['a'].add(df['b'])
df['sum2'] = df['c'].add(df['d'])

df['maxsum'] = df[['sum1','sum2']].max(axis=1)

这给出了期望的结果。
我很确定,有一个更简洁的方法...

oknrviil

oknrviil1#

您的方法没有任何问题。事实上,如果只是因为它易于阅读和理解您正在做的事情,我就会采用这种方法。但如果您正在寻找其他解决方案,这里有一个使用numpy.ufunc.reduceat的解决方案

import pandas as pd
import numpy as np

# sample frame
df = pd.DataFrame(data={'text': ['a','b','c'], 'a':[1,2,3],'b':[2,3,4],'c':[5,4,2],'d':[-2,4,1]})
# we skip the first column and convert to an array - df[df.columns[1:]].values
# we specify the indicies to slice - np.arange(len(df.columns[1:]))[::2]
# then find the max
df['max'] = np.max(np.add.reduceat(df[df.columns[1:]].values,
                                   np.arange(len(df.columns[1:]))[::2],
                                   axis=1),
                   axis=1)

  text  a  b  c  d  max
0    a  1  2  5 -2    3
1    b  2  3  4  4    8
2    c  3  4  2  1    7
4c8rllxm

4c8rllxm2#

这并不是说它更简洁,但你可以用"一次性"分配来代替你目前的方法:

df = df.assign(sum1=df[['a', 'b']].sum(1), sum2=df[['c', 'd']].sum(1),
               maxsum=lambda df: df[['sum1','sum2']].max(1))
text  a  b  c  d  sum1  sum2  maxsum
0    a  1  2  5 -2     3     3       3
1    b  2  3  4  4     5     8       8
2    c  3  4  2  1     7     3       7

相关问题