在我的数据框中,我有一个group
包含组名和 column的文本列,其中包含drop_week
范围 [1,4] 中的分类值。我想为每个组存储下降周值 1 到 4 的累积计数。我这样做:
drop_data = all_data[['group', 'drop_week']].groupby('group')['drop_week'] \
.value_counts().unstack().transpose().fillna(0).cumsum().transpose()
它有效。但是由于我花了 2 个小时的谷歌搜索才提出这个解决方案,我想知道是否有更好的方法来做到这一点。
您可以pd.crosstab
用来创建频率表。然后用于cumsum(axis=1)
计算每行的累积总和:
pd.crosstab(index=all_data['group'], columns=all_data['drop_week']).cumsum(axis=1)
# drop_week 1 2 3 4
# group
# 0 12 17 21 27
# 1 7 13 18 25
# 2 9 14 22 26
# 3 5 11 16 22
同意
drop_data = (all_data[['group', 'drop_week']].groupby('group')['drop_week']
.value_counts().unstack().transpose().fillna(0).cumsum().transpose())
# drop_week 1 2 3 4
# group
# 0 12 17 21 27
# 1 7 13 18 25
# 2 9 14 22 26
# 3 5 11 16 22
我为此使用的设置是:
import numpy as np
import pandas as pd
np.random.seed(2019)
N = 100
all_data = pd.DataFrame({'group':np.random.randint(4, size=N),
'drop_week':np.random.randint(1,5, size=N)})
drop_data = (all_data[['group', 'drop_week']].groupby('group')['drop_week']
.value_counts().unstack().transpose().fillna(0).cumsum().transpose())
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句