一个热编码/假人约会



我有这个熊猫数据框

user     join_date      session
A        2018-09-20     2019-10-20
B        2018-01-01     2019-10-20
B        2018-01-01     2019-10-21
...

我想把它变成这个

user     join_date      2019-10-20     2019-10-21    ...   n
A        2018-09-20     1              0             ...   0
B        2018-01-01     1              1             ...   0
...

用户将按用户分组,我已经对会话进行了排序

您可以使用

a = pd.crosstab(df.user, df.session).reset_index().rename_axis(None, axis=1)
df.merge(a , on='user').drop('session', axis=1).drop_duplicates()

输出

user  join_date   2019-10-20  2019-10-21
0   A   2018-09-20           1           0
1   B   2018-01-01           1           1

你想用的是函数 pd.get_dummies((,如下所示:


df = pd.DataFrame({"user": ['A', 'B', 'C'], 'session': ['2019-10-20', '2019-10-20', '2018-10-21']})
pd.get_dummies(df, columns=['session'])

生成输出


Out[137]: 
user  session_2018-10-21  session_2019-10-20
0    A                   0                   1
1    B                   0                   1
2    C                   1                   0

最新更新