Python 3.x 使用权重创建分类数据

Python 3.x 使用权重创建分类数据,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有一个数据帧,如下所示: >>> df=pd.DataFrame(np.array([['user1', 1, 10], ['user1', 2, 25], ['user2', 2, 20], ['user3', 3, 30], ['user4', 3, 50]]), columns=['UserId', 'Dim', 'Count']) >>> df UserId Dim Count 0 user1 1 10 1 user1 2

我有一个
数据帧
,如下所示:

>>> df=pd.DataFrame(np.array([['user1', 1, 10], ['user1', 2, 25], ['user2', 2, 20], ['user3', 3, 30], ['user4', 3, 50]]), columns=['UserId', 'Dim', 'Count'])
>>> df
  UserId Dim Count
0  user1   1    10
1  user1   2    25
2  user2   2    20
3  user3   3    30
4  user4   3    50
我想使用
Dim
列作为维度,为此我正在做:

>>> df_cat = pd.get_dummies(df, columns=['Dim'])
>>> df_cat
  UserId Count  Dim_1  Dim_2  Dim_3
0  user1    10      1      0      0
1  user1    25      0      1      0
2  user2    20      0      1      0
3  user3    30      0      0      1
4  user4    50      0      0      1
但是,我不想将
0
1
,而是想将
Count
列中的值关联为权重,即,我的预期输出应该如下所示:

  UserId Count Dim_1 Dim_2 Dim_3
0  user1    10    10     0     0
1  user1    25     0    25     0
2  user2    20     0    20     0
3  user3    30     0     0    30
4  user4    50     0     0    50
目前,我正在使用
for
循环来实现这一点:

for i, row in df_cat.iterrows():
    for col in df_cat.columns:
        if(row[col] == 1):
            df_cat.loc[i, col]=df_cat.Count[i]
请告诉我是否有更好的方法来执行此操作,而不是对循环使用2个
,因为循环需要时间,因为实际的数据集非常大。

用于重塑形状并添加到原始数据:

您的解决方案应使用以下方法更改:仅添加列和按列计数的列,但必须转换为整数:

df_cat = pd.get_dummies(df, columns=['Dim'])

c = df_cat.columns.str.startswith('Dim')
df_cat.loc[:, c] = df_cat.loc[:, c].mul(df['Count'].astype('int'), axis=0)
print (df_cat)
  UserId Count  Dim_1  Dim_2  Dim_3
0  user1    10     10      0      0
1  user1    25      0     25      0
2  user2    20      0     20      0
3  user3    30      0      0     30
4  user4    50      0      0     50


感谢您的快速响应。对于我的实际数据集,这两种方法都遇到了内存问题<代码>for
循环也需要时间,但似乎比这两种方法都要快。@sud29-你能检查一下
df_cat.loc[:,c]=df_cat.loc[:,c]*df['Count'].values.astype('int')[:,None]
而不是最后一行代码吗?它仍然在崩溃,我想知道是否有办法使用稀疏矩阵来完成它。@sud29-什么失败了
pd.get_dummies(df,columns=['Dim'])
df_cat = pd.get_dummies(df, columns=['Dim'])

c = df_cat.columns.str.startswith('Dim')
df_cat.loc[:, c] = df_cat.loc[:, c].mul(df['Count'].astype('int'), axis=0)
print (df_cat)
  UserId Count  Dim_1  Dim_2  Dim_3
0  user1    10     10      0      0
1  user1    25      0     25      0
2  user2    20      0     20      0
3  user3    30      0      0     30
4  user4    50      0      0     50
df_cat = pd.get_dummies(df, columns=['Dim'])

c = df_cat.columns.str.startswith('Dim')

df_cat.loc[:, c] = df_cat.loc[:, c] * df['Count'].values.astype(np.int)[:, None]
print (df_cat)
  UserId Count  Dim_1  Dim_2  Dim_3
0  user1    10     10      0      0
1  user1    25      0     25      0
2  user2    20      0     20      0
3  user3    30      0      0     30
4  user4    50      0      0     50