从数据帧和值循环中创建一个包含2列的二维数组



我有一个巨大的数据帧,看起来像这样:

u_id  i_id  
0  55218    0      
1  55218    2       
2  55218    1       
3  55222    2 
4  55222    3      

我想创建一个具有轴u_idi_id的数组,值为1(如果u_id具有i_id(,否则为0
类似:

0    1    2    3
0   1    1    1    0
1   0    0    1    1

我用创建了阵列

df_neu = np.full(df[['u_id', 'i_id']].nunique(), 0)

但是现在我不知道如何覆盖CCD_ 7。

请尝试:

df = df.groupby('u_id')['i_id'].apply(list).reset_index()
def fill(x):
for val in x.i_id:
df_un[x.name,val] = 1
df.apply(lambda x: fill(x), axis=1)
print(df_un)
[[1 1 1 0]
[0 0 1 1]]

我认为这个

columns = sorted(set(df['i_id'].values))
df_neu = pd.DataFrame({key: [1 if c in group['i_id'].values else 0
for c in columns]
for key, group in df.groupby('u_id')},
index=columns).T

本质上导致你的预期结果:

0  1  2  3
55218  1  1  1  0
55222  0  0  1  1

我的假设是,您的原始DataFrame名为df

如果你想摆脱u_id索引:

df_neu.reset_index(drop=True, inplace=True)
0  1  2  3
0  1  1  1  0
1  0  0  1  1

或者没有转座:

columns = sorted(set(df['i_id'].values))
df_neu = pd.DataFrame([[1 if c in group['i_id'].values else 0
for c in columns]
for _, group in df.groupby('u_id')],
columns=columns)

相关内容

最新更新