如何计算一列的不同值

2024-04-23 21:28:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张这样的桌子

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

列标志只有两种类型的值,即1和0。我要计算每个标志值的计数结果如下所示

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')

Tags: 代码name类型dfsizeindex标志count
1条回答
网友
1楼 · 发布于 2024-04-23 21:28:47

选项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

相关问题 更多 >