3 回答
TA贡献1772条经验 获得超6个赞
您可以尝试对 进行分组,uid并在之后获取其他列的最大值get_dummies
(pd.get_dummies(my_df ,columns=['days'],prefix='',prefix_sep='')
.groupby('uid',sort=False).max())
或者用pivot替代:
my_df.pivot_table(index="uid",columns="days",aggfunc='size',fill_value=0)
D1 D2 D3 D4
uid
4 1 0 0 1
3 0 0 1 1
6 0 1 1 0
1 0 1 0 0
TA贡献1784条经验 获得超9个赞
您可以使用crosstab+ clip:
df = pd.crosstab(my_df['uid'], my_df['days']).clip(upper=1)
days D1 D2 D3 D4
uid
1 0 1 0 0
3 0 0 1 1
4 1 0 0 1
6 0 1 1 0
TA贡献1942条经验 获得超3个赞
尝试这个选项:
ss = pd.get_dummies(my_df, columns=['days']).groupby(['uid'], as_index=False).sum()
print(ss)
输出:
uid days_D1 days_D2 days_D3 days_D4
0 1 0 1 0 0
1 3 0 0 1 1
2 4 1 0 0 1
3 6 0 1 1 0
添加回答
举报