Python 在不带NaN的列中插入值

Python 在不带NaN的列中插入值,python,pandas,Python,Pandas,我试图计算数据帧中一些值的计数,比如 user_id event_type 1 a 1 a 1 b 2 a 2 b 2 c 我想要一张像这样的桌子 user_id event_type event_type_a event_type_b event_type_c 1 a 2

我试图计算数据帧中一些值的计数,比如

user_id  event_type
    1         a   
    1         a  
    1         b
    2         a
    2         b
    2         c
我想要一张像这样的桌子

user_id  event_type  event_type_a  event_type_b  event_type_c
    1         a           2              1             0
    1         a           2              1             0
    1         b           2              1             0
    2         a           1              1             1
    2         b           1              1             1
    2         c           1              1             1
user_id    count_a
   1          2
   2          1
我试过这样的代码

df[' event_type_a'] = df['user_id', 'event_type'].where(df['event_type']=='a').groupby([user_id]).count()
像桌子一样

user_id  event_type  event_type_a  event_type_b  event_type_c
    1         a           2              1             0
    1         a           2              1             0
    1         b           2              1             0
    2         a           1              1             1
    2         b           1              1             1
    2         c           1              1             1
user_id    count_a
   1          2
   2          1
我应该如何将该值插入默认df,以填充没有NaN项的所有行

可能存在这样的方法,例如,
“从df_2['column']插入df_1['column'],其中df_1['user_id']==df_1['user_id']”“

用于新列名称和:


这里是另一种获取df2的方法,正如Jez所提到的,但略有不同,因为我使用了
转换
,并且没有提供
agg
格式,所以df2形状与原始df的长度相同

df2= df.set_index('user_id').event_type.str.get_dummies().groupby(level=0).transform('sum')
df2
Out[11]: 
         a  b  c
user_id         
1        2  1  0
1        2  1  0
1        2  1  0
2        1  1  1
2        1  1  1
2        1  1  1

然后使用
concat

df2.index=df.index
pd.concat([df,df2],axis=1)
Out[19]: 
   user_id event_type  a  b  c
0        1          a  2  1  0
1        1          a  2  1  0
2        1          b  2  1  0
3        2          a  1  1  1
4        2          b  1  1  1
5        2          c  1  1  1

谢谢!以前从未在《熊猫》中使用过交叉表)你的速度给我留下了深刻的印象。我经常会制定我应该如何解决这个问题,看看你已经有了:DIdea
df=pd.concat([df,df2.set_index(df.index)],axis=1)