如何用if条件语句按另一列条件修改DataFrame列值?
问题解决方法
你的代码有两个关键问题导致没有效果:
- 错误地把判断结果包裹成了列表(
[row['Text_Count'] >= 50]),这是一个包含布尔值的列表,永远不可能等于True iterrows()返回的row是原DataFrame的副本,直接修改row['big']不会同步到原数据
下面是两种用if条件实现需求的正确写法:
方法一:循环中通过索引修改原DataFrame
for index, row in df3.iterrows(): if row['Text_Count'] >= 50: df3.loc[index, 'big'] = 'Yes'
方法二:使用apply结合if条件
df3['big'] = df3.apply(lambda row: 'Yes' if row['Text_Count'] >= 50 else row['big'], axis=1)
注意:虽然可以用上述if条件的方式实现,但Pandas官方更推荐你一开始知道的向量化操作(
df3.loc[df3['Text_Count'] >= 50, 'big'] = "Yes"),因为循环的执行效率远低于向量化操作,数据量越大差异越明显。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

