如何使用lambda函数对Pandas DataFrame按行统计指定字符出现次数?
错误原因
你出现语法错误的核心是混淆了pandas.DataFrame.apply的工作逻辑:
- 当指定
axis=1时,apply会自动遍历DataFrame的每一行,将整行数据作为参数传入你指定的处理函数,完全不需要额外手写for循环遍历行 - 你写的
for x in range(...)属于多余的生成器表达式,同时df.iloc[0]取的是第一行的具体数据,不是整数索引,本身就不能作为range()的入参,双重问题导致语法报错
正确写法(沿用你已定义的count_P函数)
直接把函数名传给apply,同时指定axis=1即可:
df['Attendance'] = df.apply(count_P, axis=1)
如果你要保留lambda写法也可以,属于等价但冗余的写法:
df['Attendance'] = df.apply(lambda x: count_P(x), axis=1)
更高效的推荐实现
不需要自定义循环函数,用pandas向量化操作效率更高,尤其适合数据量较大的场景:
df['Attendance'] = df.eq('P').sum(axis=1)
逻辑说明:df.eq('P')会将整个DataFrame中值等于'P'的位置替换为True,其余为False;sum(axis=1)按行求和时,True会被视为1、False视为0,直接得到每行'P'的出现次数。
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

