Berikut adalah satu kasus yang disederhanakan:

df = pd.DataFrame({'col1': [1, 1, 1, 2, 2, 2, 3, 3, 3], 'col2': ['a', 'b', 'c', 'A', 'C', 'B', 'red', 'blue', 'greed']})

Saya ingin melakukan permutasi subset pada col2 dengan mengacu pada col1. Misalnya, hanya mengubah 'a', 'b', 'c' di col2 karena mereka termasuk dalam kategori 1 di col1. Dan permute 'A', 'C', 'B' di kategori 2, lalu warna-warna itu di kategori 3. Outputnya seperti di bawah ini:

col1    col2
0   1   b
1   1   c
2   1   a
3   2   A
4   2   B
5   2   C
6   3   blue
7   3   red
8   3   green

Karena ada ribuan kategori di col1, saya berpikir apakah ada cara sederhana daripada melakukannya dalam satu lingkaran satu per satu. Terima kasih.

0
user7725010 8 Mei 2021, 00:47

1 menjawab

Jawaban Terbaik
df['col2'] = df.groupby('col1', as_index=False).col2.transform(np.random.permutation)
df

Keluaran

    col1    col2
0   1       c
1   1       b
2   1       a
3   2       B
4   2       A
5   2       C
6   3      red
7   3      greed
8   3      blue
1
Uts 7 Mei 2021, 23:06