我有一张这样的表
DURATION FLAG
1 1
1 1
1 1
1 0
1 0
2 1
2 1
2 0
2 0
2 0
3 1
3 0
3 0
3 0
3 0
列FLAG只有两种值,即1和0.我想要计算FLAG每个值的计数,结果看起来像这样
DURATION FLAG_1_COUNT FLAG_0_COUNT
1 3 2
2 2 3
3 1 4
如何获得上述结果。我尝试了以下代码但没有返回正确的结果。
df.groupby(['DURATION', 'FLAG']).size().reset_index(name='count')
答案 0 :(得分:2)
选项1
str.get_dummies
+ sum
-
df.set_index('DURATION').FLAG\
.astype(str).str.get_dummies().sum(level=0)
0 1
DURATION
1 2 3
2 3 2
3 4 1
或者等同于pd.get_dummies
-
pd.get_dummies(df.set_index('DURATION').FLAG).sum(level=0)
0 1
DURATION
1 2 3
2 3 2
3 4 1
对于列名,您可以使用add_*fix
-
pd.get_dummies(df.set_index('DURATION').FLAG)\
.sum(level=0).add_prefix('FLAG_').add_suffix('_COUNT')
FLAG_0_COUNT FLAG_1_COUNT
DURATION
1 2 3
2 3 2
3 4 1
如果您需要重置索引,请使用reset_index
-
i = df.set_index('DURATION').FLAG
pd.get_dummies(i)\
.sum(level=0)\
.add_prefix('FLAG_')\
.add_suffix('_COUNT')\
.reset_index()
DURATION FLAG_0_COUNT FLAG_1_COUNT
0 1 2 3
1 2 3 2
2 3 4 1
选项2
groupby
+ value_counts
+ unstack
df.groupby('DURATION').FLAG.value_counts().unstack(-1)
FLAG 0 1
DURATION
1 2 3
2 3 2
3 4 1