在Pandas数据框中计算一个字符串出现的次数

3

我需要对一个数据框进行计数和总和统计,但需带有条件:

fruit days_old
apple 4
apple 5
orange 1
orange 5

我必须考虑到水果已超过3天的情况。所以我需要的输出是:
2个苹果和1个橙子
我认为我需要使用一个apply函数,但我需要将每种水果类型保存到一个变量或其他地方。我相信有更简单的方法。
附:我一直在寻找创建具有适当间距的表格的清晰方法,但我没有找到。唯一明确的是不要复制和粘贴带有制表符的内容!

几乎是重复的问题:在pandas中计算出现次数的最有效方法是什么?(缺少筛选部分)。 - pault
4个回答

3

其中一种方法是使用pd.Series.value_counts函数:

res = df.loc[df['days_old'] > 3, 'fruit'].value_counts()

# apple     2
# orange    1
# Name: fruit, dtype: int64

使用 pd.DataFrame.apply 不可取,因为这会导致低效的循环。


1
所有的好答案,谢谢。我知道如何计数,但不知道在哪里放条件。干杯! - Chuck

3
您可以使用 value_counts() 方法来实现:
In [120]: df[df.days_old > 3]['fruit'].value_counts()
Out[120]:
apple     2
orange    1
Name: fruit, dtype: int64

3
我想参加变奏派对。 pd.factorize + np.bincount
f, u = pd.factorize(df.fruit)
pd.Series(
    np.bincount(f, df.days_old > 3).astype(int), u
)

apple     2
orange    1
dtype: int64

2

@jpp 和 @chrisz 描述的 value_counts() 方法很不错。这里再分享一种方法,你可以使用 groupby

df[df.days_old > 3].groupby('fruit').size()

# fruit
# apple     2
# orange    1
# dtype: int64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接