Python 在一行而不是多行中获取编码的分类变量

Python 在一行而不是多行中获取编码的分类变量,python,pandas,dataframe,one-hot-encoding,Python,Pandas,Dataframe,One Hot Encoding,我有与此类似的原始数据帧 我用过get_假人,得到了这种编码的数据帧 我想要一个数据帧,其中所有分类值都针对每个uid编码在一行中。像这样 我曾试图寻找一种优化的方法来实现这个结果,但我无法做到这一点。我的原始数据框中有222000个值。请建议这样获取编码的分类变量的方法您可以尝试在uid上分组,并在get\u假人之后获取其他列的最大值 或使用pivot进行替换: my_df.pivot_table(index="uid",columns="days",a

我有与此类似的原始数据帧

我用过get_假人,得到了这种编码的数据帧

我想要一个数据帧,其中所有分类值都针对每个uid编码在一行中。像这样


我曾试图寻找一种优化的方法来实现这个结果,但我无法做到这一点。我的原始数据框中有222000个值。请建议这样获取编码的分类变量的方法

您可以尝试在uid上分组,并在get\u假人之后获取其他列的最大值

或使用pivot进行替换:

my_df.pivot_table(index="uid",columns="days",aggfunc='size',fill_value=0)

您可以尝试在uid上分组,并在get_假人之后获得其他列的最大值

或使用pivot进行替换:

my_df.pivot_table(index="uid",columns="days",aggfunc='size',fill_value=0)
尝试此选项:

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
尝试此选项:

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
您可以使用交叉表+剪辑:

您可以使用交叉表+剪辑:

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
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