Pandas条件过滤:仅当C2大于2时移除C1中的0值
Pandas DataFrame 按指定规则过滤行
需求说明
仅当C2列的值大于2时,移除C1列中的0值,具体规则:
- 若C2 ≤ 2,所有行全部保留
- 若C2 > 2,仅保留C1 ≠ 0的行
错误原因分析
你之前使用的(df['C1'] != 0) & (df['C2'] > 2)或(df['C1'] > 0) & (df['C2'] > 2),只保留了C2>2且C1≠0的行,完全漏掉了C2≤2的所有行,所以结果不符合预期。
正确实现代码
首先构造目标DataFrame:
import pandas as pd data = { 'C1': [100, 25, 67, 0, 0, 67], 'C2': [10, 8, 4, 4, 1, 0] } df = pd.DataFrame(data)
使用以下两种方式均可得到预期结果:
# 方式1:直接保留符合要求的行 filtered_df = df[(df['C2'] <= 2) | (df['C1'] != 0)] # 方式2:排除需要移除的行(C2>2且C1=0) filtered_df = df[~((df['C2'] > 2) & (df['C1'] == 0))]
过滤后结果
| C1 | C2 |
|---|---|
| 100 | 10 |
| 25 | 8 |
| 67 | 4 |
| 0 | 1 |
| 67 | 0 |
内容的提问来源于stack exchange,提问作者coghlan
相关产品推荐
相关产品推荐

