Buat array 2D dengan 2 kolom dari dataframe dan loop untuk nilai
Nov 11 2020
Saya memiliki kerangka data besar yang terlihat seperti ini:
u_id i_id
0 55218 0
1 55218 2
2 55218 1
3 55222 2
4 55222 3
Saya ingin membuat array dengan sumbu u_iddan i_iddan nilainya adalah 1(jika u_idmemiliki i_id) dan 0sebaliknya.
Seperti itu:
0 1 2 3
0 1 1 1 0
1 0 0 1 1
Saya membuat array dengan:
df_neu = np.full(df[['u_id', 'i_id']].nunique(), 0)
tapi sekarang saya tidak tahu cara menimpa 0.
Jawaban
sharathnatraj Nov 11 2020 at 10:42
Silakan coba:
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]]
Timus Nov 13 2020 at 21:21
Saya pikir ini
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
pada dasarnya mengarah pada hasil yang Anda harapkan:
0 1 2 3
55218 1 1 1 0
55222 0 0 1 1
Asumsi saya adalah bahwa DataFrame asli Anda diberi nama df.
Jika Anda ingin menghapus u_idindeks:
df_neu.reset_index(drop=True, inplace=True)
0 1 2 3
0 1 1 1 0
1 0 0 1 1
Atau tanpa transposing:
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)
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'