我想创建一列,其最大值介于从数据帧的其他列计算出的2个值之间。
import pandas as pd
df = pd.DataFrame({"A": [1,2,3], "B": [-2, 8, 1]})
df['Max Col'] = max(df['A']*3, df['B']+df['A'])
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
期望的结果是一个新的df列['Max Col'],其中包含上述计算的最大值。
我知道用计算创建两个新列然后应用。max(axis = 1)的长远解决方案。我正在寻找一个直接的解决方案。
谢谢。
import pandas as pd
df = pd.DataFrame({"A": [1,2,3], "B": [-2, 8, 1]})
# map the max function to a zip of your calculations
df['max'] = list(map(max, zip(df['A']*3, df['B']+df['A'])))
print(df)
A B max
0 1 -2 3
1 2 8 10
2 3 1 9
使用np.maximum
:
df['max'] =np.maximum(df['A']*3, df['B']+df['A'])
输出:
A B max
0 1 -2 3
1 2 8 10
2 3 1 9
您可以使用apply
方法。 -
df['max'] = df.apply(lambda x: max(x['A']*3, x['A'] + x['B']), axis=1)