如何用Pandas批量统计DataFrame每行奇偶数值数量并新增列存储
解决DataFrame每行奇偶数量统计并批量生成新列的问题
推荐方案:矢量化操作(高效)
Pandas的矢量化运算可以避免逐行循环,直接对整表进行计算,速度更快。
核心逻辑:
- 判断每个元素是否为偶数(
df % 2 == 0),得到布尔值矩阵 - 按行求和(
sum(axis=1)),得到每行偶数的数量,存入coleven列 - 奇数数量可以用每行的总元素数(即DataFrame的列数)减去偶数数量,或者直接判断奇数后求和
完整代码:
import pandas as pd # 读取数据 df = pd.read_csv('allornothingev.csv') # 计算每行偶数数量 df['coleven'] = (df % 2 == 0).sum(axis=1) # 计算每行奇数数量(两种写法二选一) df['colodd'] = df.shape[1] - df['coleven'] # 或者 df['colodd'] = (df % 2 != 0).sum(axis=1) # 输出结果 print(df)
备选方案:逐行处理(适合特殊逻辑场景)
如果需要自定义逐行处理逻辑,可以用apply方法遍历每行:
import pandas as pd df = pd.read_csv('allornothingev.csv') def calc_odd_even(row): even_count = sum(1 for val in row if val % 2 == 0) odd_count = len(row) - even_count return pd.Series([even_count, odd_count], index=['coleven', 'colodd']) # 应用函数到每行,生成新列 df[['coleven', 'colodd']] = df.apply(calc_odd_even, axis=1) print(df)
原代码问题说明
你的代码只处理了第0行(df.loc[0, :]),且循环中使用了未定义的numbers变量(应该是row_list),因此只能单行处理。上述两种方案都能批量处理所有行,其中矢量化操作优先推荐,性能远高于逐行循环。
内容的提问来源于stack exchange,提问作者codenameglen
相关产品推荐
相关产品推荐

