![](/img/trans.png)
[英]update pandas dataframe column with value from another dataframe with condition
[英]Pandas dataframe doesn't update column value under condition
原来我有一个 dataframe (连同其他列,但这里的信息不相关)
指数 | 脱氧核糖核酸 |
---|---|
0 | 0 |
1 | 1 |
2 | -1 |
3 | 0 |
我在 dataframe 中添加了一个名为 consec_bs 的额外 boolean 列。 我将 consec_bs 定义为:如果df['DNA'] - df['DNA'].shift()
的绝对值等于 2,则 consec_bs 为 True。 否则是假的。 df['DNA']
只取值 -1、0 或 1。我的代码如下:
def consec_bs(df):
df['consec_bs'] = False
temp = df.shift()
df['diff'] = abs(df['DNA'] - temp['DNA'])
df[df['diff'] == 2].loc['consec_bs'] = True
return df
output df 是
指数 | 脱氧核糖核酸 | consec_bs |
---|---|---|
0 | 0 | 错误的 |
1 | 1 | 错误的 |
2 | -1 | 错误的 |
3 | 0 | 错误的 |
但是, consec_bs 应该在索引 2 处返回 true。我试过df[df['diff'] == 2]['consec_bs'].replace(False, True, inplace = True)
,但它不会更新 consec_bs .
这是一个链式分配问题。 做df.loc[df['diff'] == 2, 'consec_bs'] = True
代替。
pandas 文档中描述了这个问题(Why does assignment failed when using chained indexing?)
尝试:
df["consec_bs"] = (abs(df['DNA'] - df['DNA'].shift()).eq(2))
print(df)
index DNA consec_bs
0 0 0 False
1 1 1 False
2 2 -1 True
3 3 0 False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.