You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:02:40