[英]Pandas dataframe replace value on condition
我有以下數據框:
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().
使用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
所以你可以做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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.