X行Y列DataFrame行内指定变量频次统计异常求助
解决DataFrame每行特定变量频次统计的问题
我来帮你搞定这个统计问题!你的代码里有几个语法和逻辑上的小问题,咱们一步步修正:
问题出在哪?
你写的代码df.apply(lambda sum(row[0:y]=="special variable", axis=1)有两处明显问题:
- Lambda函数的语法错误:没有先定义输入参数(应该是
lambda row: ...的形式) - 参数位置错误:
axis=1是apply()的参数,不是sum()的,而且sum本身也不需要这个参数
正确的实现方法
方法1:修正后的apply写法
如果坚持用apply(),正确的代码应该是这样:
# 添加新列存储每行的频次 df['special_var_count'] = df.apply(lambda row: sum(row == "special variable"), axis=1)
- 这里lambda接收每行数据
row作为参数 row == "special variable"会生成一个布尔数组,sum()会把True转为1、False转为0,直接得到该行的出现次数- 如果确实需要只统计前Y列,把
row改成row.iloc[:Y]就行(注意用iloc做位置索引)
方法2:更高效的矢量化操作(推荐)
apply()在处理大数据量时速度较慢,更推荐用矢量化操作直接处理整个DataFrame:
df['special_var_count'] = (df == "special variable").sum(axis=1)
df == "special variable"会生成一个和原DataFrame形状相同的布尔矩阵.sum(axis=1)按行求和,直接得到每行中目标变量的出现次数,速度比apply快很多
举个小例子验证
假设你的DataFrame是这样:
import pandas as pd df = pd.DataFrame({ 'col1': ['a', 'special variable', 'b'], 'col2': ['special variable', 'c', 'special variable'], 'col3': ['d', 'special variable', 'special variable'] })
用上面的方法运行后,special_var_count列会是:[1, 2, 2],完全符合预期。
内容的提问来源于stack exchange,提问作者Satya0907
相关产品推荐
相关产品推荐

