如何获得一个列的不同值的计数

时间:2017-12-16 12:28:02

标签: python pandas

我有一张这样的表

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 个答案:

答案 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