我需要对一个数据框进行计数和总和统计,但需带有条件:
fruit days_old
apple 4
apple 5
orange 1
orange 5
我必须考虑到水果已超过3天的情况。所以我需要的输出是:
2个苹果和1个橙子
我认为我需要使用一个apply函数,但我需要将每种水果类型保存到一个变量或其他地方。我相信有更简单的方法。
附:我一直在寻找创建具有适当间距的表格的清晰方法,但我没有找到。唯一明确的是不要复制和粘贴带有制表符的内容!
我需要对一个数据框进行计数和总和统计,但需带有条件:
fruit days_old
apple 4
apple 5
orange 1
orange 5
其中一种方法是使用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
不可取,因为这会导致低效的循环。
value_counts()
方法来实现:In [120]: df[df.days_old > 3]['fruit'].value_counts()
Out[120]:
apple 2
orange 1
Name: fruit, dtype: int64
f, u = pd.factorize(df.fruit)
pd.Series(
np.bincount(f, df.days_old > 3).astype(int), u
)
apple 2
orange 1
dtype: int64
@jpp 和 @chrisz 描述的 value_counts()
方法很不错。这里再分享一种方法,你可以使用 groupby
:
df[df.days_old > 3].groupby('fruit').size()
# fruit
# apple 2
# orange 1
# dtype: int64