计算的 pandas 列和 0 的最大值
Maximum of calculated pandas column and 0
我有一个非常简单的问题(我猜)但没有找到正确的语法来解决它:
以下数据框:
A B C
0 7 12 2
1 5 4 4
2 4 8 2
3 9 2 3
我需要为每一行创建一个新的 D 列,最大为 (0 ; A-B+C)
我尝试了 np.maximum(df.A-df.B+df.C,0) 但它不匹配并给我计算列的最大值对于每一行(示例中为 10)。
最后,我想获得下面的DF :
A B C D
0 7 12 2 0
1 5 4 4 5
2 4 8 2 0
3 9 2 3 10
感谢任何帮助
谢谢
您可以使用 np.where
:
s = df["A"]-df["B"]+df["C"]
df["D"] = np.where(s>0, s, 0) #or s.where(s>0, 0)
print (df)
A B C D
0 7 12 2 0
1 5 4 4 5
2 4 8 2 0
3 9 2 3 10
要在一行中执行此操作,您可以使用 apply
将最大值函数分别应用于每一行。
In [19]: df['D'] = df.apply(lambda s: max(s['A'] - s['B'] + s['C'], 0), axis=1)
In [20]: df
Out[20]:
A B C D
0 0 0 0 0
1 5 4 4 5
2 0 0 0 0
3 9 2 3 10
让我们试试
df['D'] = df.eval('A-B+C').clip(lower=0)
Out[256]:
0 0
1 5
2 0
3 10
dtype: int64
我有一个非常简单的问题(我猜)但没有找到正确的语法来解决它:
以下数据框:
A B C
0 7 12 2
1 5 4 4
2 4 8 2
3 9 2 3
我需要为每一行创建一个新的 D 列,最大为 (0 ; A-B+C)
我尝试了 np.maximum(df.A-df.B+df.C,0) 但它不匹配并给我计算列的最大值对于每一行(示例中为 10)。
最后,我想获得下面的DF :
A B C D
0 7 12 2 0
1 5 4 4 5
2 4 8 2 0
3 9 2 3 10
感谢任何帮助 谢谢
您可以使用 np.where
:
s = df["A"]-df["B"]+df["C"]
df["D"] = np.where(s>0, s, 0) #or s.where(s>0, 0)
print (df)
A B C D
0 7 12 2 0
1 5 4 4 5
2 4 8 2 0
3 9 2 3 10
要在一行中执行此操作,您可以使用 apply
将最大值函数分别应用于每一行。
In [19]: df['D'] = df.apply(lambda s: max(s['A'] - s['B'] + s['C'], 0), axis=1)
In [20]: df
Out[20]:
A B C D
0 0 0 0 0
1 5 4 4 5
2 0 0 0 0
3 9 2 3 10
让我们试试
df['D'] = df.eval('A-B+C').clip(lower=0)
Out[256]:
0 0
1 5
2 0
3 10
dtype: int64