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)