Python 在一行而不是多行中获取编码的分类变量
我有与此类似的原始数据帧 我用过get_假人,得到了这种编码的数据帧 我想要一个数据帧,其中所有分类值都针对每个uid编码在一行中。像这样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
我曾试图寻找一种优化的方法来实现这个结果,但我无法做到这一点。我的原始数据框中有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