Python 如何在dataframe中填充列作为分组事件的计数

Python 如何在dataframe中填充列作为分组事件的计数,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有以下数据帧,其中col_1只能取值1.0或0.0: +-------+---------+ | score | col_a | +-------+---------+ | 10 | 1.0 | | 15 | 0.0 | | 12 | 0.0 | | 12 | 0.0 | +-------+---------+ 我想创建以下数据框,基本上按分数分组,然后填充每个分数的计数,其中col\u a=1.0或col\u a=0.0 +

假设我有以下数据帧,其中col_1只能取值
1.0
0.0

+-------+---------+
| score | col_a   | 
+-------+---------+
|   10  |  1.0    |
|   15  |  0.0    |
|   12  |  0.0    |
|   12  |  0.0    |
+-------+---------+
我想创建以下数据框,基本上按分数分组,然后填充每个分数的计数,其中
col\u a=1.0
col\u a=0.0

+--------+----------|---------+
| score  |  col_a_1 | col_a_0 |
+--------+----------+---------+
| 10     |    1     |     0   |
| 15     |    0     |     1   |
| 12     |    0     |     2   |
+--------+----------+---------+

我知道这是按op分组的,但我不确定如何将计数填充到新列中

定义一个函数,计算列a中0和1的出现次数 当前行组中的列:

def cnt(grp):
    n0 = grp.col_a[grp.col_a == 0].size
    n1 = grp.col_a[grp.col_a == 1].size
    return pd.Series([n1, n0], index=['col_a_1', 'col_a_0'])
然后应用此函数:

df.groupby('score', sort=False).apply(cnt).reset_index()
对于示例数据,结果是:

   score  col_a_1  col_a_0
0     10        1        0
1     15        0        1
2     12        0        2

定义一个计算列中0和1的出现次数的函数 当前行组中的列:

def cnt(grp):
    n0 = grp.col_a[grp.col_a == 0].size
    n1 = grp.col_a[grp.col_a == 1].size
    return pd.Series([n1, n0], index=['col_a_1', 'col_a_0'])
然后应用此函数:

df.groupby('score', sort=False).apply(cnt).reset_index()
对于示例数据,结果是:

   score  col_a_1  col_a_0
0     10        1        0
1     15        0        1
2     12        0        2

由于您的列是二进制的,所以只需执行以下操作即可

col_a_1=df.groupby('score').sum()
col_a_0=df.groupby('score').count()-col_a_1
pd.concat([col_a_0.添加后缀(''u 0'),col_a_1.添加后缀(''u 1')],axis=1)


由于您的列是二进制的,您只需执行以下操作即可

col_a_1=df.groupby('score').sum()
col_a_0=df.groupby('score').count()-col_a_1
pd.concat([col_a_0.添加后缀(''u 0'),col_a_1.添加后缀(''u 1')],axis=1)