Saya ingin mengganti nilai kolom tertentu. Saya dapat mengubah nilai satu per satu tetapi, saya memiliki ratusan kolom dan saya perlu mengubah kolom yang dimulai dengan string tertentu. Berikut ini contohnya, saya ingin mengganti string ketika nama kolom dimulai dengan "Q14"

df.filter(regex = 'Q14').replace(1, 'Selected').replace(0, 'Not selected')

Kode di atas berfungsi. Tapi, bagaimana saya bisa menerapkannya di dataframe saya? Karena ini adalah fungsinya jadi saya tidak bisa menggunakan inplace.

0
s_khan92 5 Januari 2021, 16:41

3 jawaban

Jawaban Terbaik

Pertimbangkan di bawah df:

In [439]: df = pd.DataFrame({'Q14_A':[ 1,0,0,2], 'Q14_B':[0,1,1,2], 'Q12_A':[1,0,0,0]})

In [440]: df
Out[440]: 
   Q14_A  Q14_B  Q12_A
0      1      0      1
1      0      1      0
2      0      1      0
3      2      2      0

Filter kolom yang dimulai dengan Q14, simpan dalam variabel:

In [443]: cols = df.filter(regex='^Q14').columns

Sekarang, ubah kolom yang dipilih di atas dengan perintah replace Anda:

In [446]: df[cols] = df[cols].replace(1, 'Selected').replace(0, 'Not selected')

Keluaran:

In [447]: df
Out[447]: 
          Q14_A         Q14_B  Q12_A
0      Selected  Not selected      1
1  Not selected      Selected      0
2  Not selected      Selected      0
3             2             2      0
1
Mayank Porwal 5 Januari 2021, 13:54

Menggunakan pandas.Series.replace dict

df = pd.DataFrame({'Q14_A':[ 1,0,0,2], 'Q14_B':[0,1,1,2], 'Q12_A':[1,0,0,0]})
cols = df.filter(regex='^Q14').columns

replace_map = {
    1: "Selected",
    0 : "Not Selected"

}

df[cols] = df[cols].replace(replace_map)
3
pyd 5 Januari 2021, 14:46

Anda dapat mengulangi semua kolom dan berdasarkan kondisi yang cocok, terapkan transformasi kolom menggunakan perintah apply:

for column in df.columns:
    if column.startswith("Q"):
        df[column] = df[column].apply(lambda x: "Selected" if x == 1 else "Not selected")
1
evalkaz 5 Januari 2021, 13:46