熊猫数据框条件替换值

时间:2020-10-21 00:51:36

标签: python pandas

我有以下数据框:

    limit1  limit2 
a    123     567
b    65      0
c    123     1233
d    0987    0
e    231451  0998

我想创建一个新的框架,并为每行设置下限。除非为0,否则将采用另一列的值。

所需的输出:

    limit1  limit2
a    123     567
b    65      65
c    123     1233
d    0987    0987
e    231451  0998

如您所见,右边的0被替换为左边相应行中的值。

我的以下代码不起作用:

low_limit = pd.concat([limit1, limit2], join='outer', axis=1)
if limit2 == 0:
    low_limit = limit1
else:
    low_limit.min(axis=1).dropna()

错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

2 个答案:

答案 0 :(得分:1)

使用np.where(condition, outcome if condition is True, outcome ifcondition false)

df['limit2']=np.where(df.limit2==0,df.limit1,df.min(1))

    limit1  limit2
a     123     123
b      65      65
c     123     123
d     987     987
e  231451     998

答案 1 :(得分:0)

所以您可以执行replace,因为min(NaN, not NaN value)放出了非空值

df.limit2 = df.replace({'limit2' : {0 : np.nan}}).min(axis=1)
df
Out[46]: 
   limit1  limit2
a     123   123.0
b      65    65.0
c     123   123.0
d     987   987.0
e  231451   998.0