我有一张这样的 table
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')
最佳答案
选项 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
关于python - 如何获取一列的不同值的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47845672/