繁体   English   中英

Pandas dataframe 在条件下不更新列值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM