Pandas筛选含X列并统计每行含Y值数量问题求助
解决方法及代码修正
错误原因分析
你写的代码有两个核心问题:
- 索引语法错误:
df.loc[:~df.columns.str.contains('X')]里的~位置不对,正确的列筛选应该是把~作用在布尔数组上,写成df.loc[:, df.columns.str.contains('X')](筛选含X的列),原写法导致索引逻辑混乱,触发DatetimeIndex的切片错误。 - 工具用错:
np.where是做条件值替换的,不适合统计每行符合条件的单元格数量,这类统计应该用求和操作。
正确实现步骤
- 先筛选出列名包含“X”的目标列;
- 对目标列的每个单元格,判断是否包含字符串“Y”;
- 按行求和,得到每行符合条件的单元格数量,赋值给
Result列。
完整代码示例
import pandas as pd # 示例DataFrame(可替换为你的数据集) df = pd.DataFrame({ '日期': pd.date_range('2023-01-01', periods=3), 'ColX_A': ['Y', 'ABY', 'N'], 'ColX_B': ['XYZ', 'Y', 'YYY'], 'ColZ': ['Y', 'N', 'Y'] }) # 1. 筛选列名包含"X"的列 target_cols = df.columns[df.columns.str.contains('X')] # 2. 统计每行包含"Y"的单元格数量 # str.contains('Y')判断单元格是否含Y,na=False处理空值(视为不含) # sum(axis=1)按行求和,得到每行符合条件的数量 df['Result'] = df[target_cols].str.contains('Y', na=False).sum(axis=1) print(df)
输出结果
| 日期 | ColX_A | ColX_B | ColZ | Result |
|---|---|---|---|---|
| 2023-01-01 | Y | XYZ | Y | 1 |
| 2023-01-02 | ABY | Y | N | 2 |
| 2023-01-03 | N | YYY | Y | 1 |
内容的提问来源于stack exchange,提问作者geaa
相关产品推荐
相关产品推荐

