如何在Pandas DataFrame中按条件统计超3天的水果出现次数?
简洁搞定Pandas水果统计需求
嘿,这事儿完全没必要用繁琐的apply!Pandas自带的工具就能轻松实现你的需求,我给你分享几种最顺手的方法:
先构造示例数据
首先咱先把你说的DataFrame建出来,方便你复现测试:
import pandas as pd df = pd.DataFrame({ 'fruit': ['apple', 'apple', 'orange', 'orange'], 'days_old': [4, 5, 1, 5] })
方法一:布尔过滤 + value_counts()(最直接)
这是我平时用得最多的写法,一步到位:
# 先筛选出days_old大于3的行,再统计各水果出现次数 count_result = df[df['days_old'] > 3]['fruit'].value_counts() print(count_result)
输出结果:
apple 2 orange 1 Name: fruit, dtype: int64
原理很简单:df['days_old'] > 3生成布尔索引,帮我们挑出符合条件的行;接着取fruit列,用value_counts()直接统计频次,比apply简洁太多!
方法二:分组统计(适合后续扩展)
如果你之后还要对分组做更多操作,用groupby的写法也很清晰:
# 先过滤再分组统计数量 count_result = df[df['days_old'] > 3].groupby('fruit').size()
这个写法的结果和上面完全一致,size()会返回每个分组的行数,也就是我们要的出现次数。
转成你要的直观格式
如果想得到你说的“2个苹果、1个橙子”这种更友好的格式,可以把结果转成字典或者自定义字符串:
# 转成字典 result_dict = count_result.to_dict() # 输出: {'apple': 2, 'orange': 1} # 生成描述性字符串 result_str = ", ".join([f"{count}个{fruit}" for fruit, count in count_result.items()]) print(result_str) # 输出: "2个apple, 1个orange"
内容的提问来源于stack exchange,提问作者Chuck
相关产品推荐
相关产品推荐

