Rumah > pembangunan bahagian belakang > Tutorial Python > Kemas kini nilai dalam DF berdasarkan nama lajur

Kemas kini nilai dalam DF berdasarkan nama lajur

WBOY
Lepaskan: 2024-02-09 13:00:15
ke hadapan
630 orang telah melayarinya

根据列名更新 DF 中的值

Kandungan soalan

Saya mempunyai rangka data panda seterusnya:

x_1 x_2 x_3 x_4 col_to_replace cor_factor
    
    1   2   3   4   x_2            1
    3   3   5   1   x_1            6
    2   2   0   0   x_3            0
...
Salin selepas log masuk

Saya nak guna cor_factor 中的值更新保存在 col_to_replace 中的名称列,并将结果保存在相应的列以及 car_factor lajur. Beberapa penyelesaian (hodoh) mungkin:

for i in len(df.shape[0]):
    df[df['col_to_replace']].iloc[i] = df[df['col_to_replace']].iloc[i] - df['cor_factor'].iloc[i]                                                                          
    df['cor_factor'].iloc[i] = df['cor_factor'].iloc[i] -  df[df['col_to_replace']].iloc[i]
Salin selepas log masuk

Kaedah ini pastinya tidak menjimatkan masa. Saya sedang mencari penyelesaian yang lebih pantas.

Output

df sepatutnya kelihatan seperti ini:

x_1 x_2 x_3 x_4 col_to_replace cor_factor
    
    1   1   3   4   x_2            -1
    -3  3   5   1   x_1            3
    2   2   0   0   x_3            0
...
Salin selepas log masuk


Jawapan betul


Betulkan lajur terakhir menggunakan pivot 更正 x_nilai dan pencarian indeks. Memandangkan nilai berubah, pastikan anda menyalin sebelum mengubah suai:

# perform indexing lookup
# save the value for later
idx, cols = pd.factorize(df['col_to_replace'])
corr = df.reindex(cols, axis=1).to_numpy()[np.arange(len(df)), idx]

# pivot and subtract the factor
# ensure original order of the columns
cols = df.columns.intersection(cols, sort=false)
df[cols] = df[cols].sub(df.pivot(columns='col_to_replace',
                                 values='cor_factor'),
                        fill_value=0).convert_dtypes()
# correct with the saved "corr"
df['cor_factor'] -= corr
Salin selepas log masuk

Keluaran:

x_1  x_2  x_3  x_4 col_to_replace  cor_factor
0    1    1    3    4            x_2          -1
1   -3    3    5    1            x_1           3
2    2    2    0    0            x_3           0
Salin selepas log masuk

Atas ialah kandungan terperinci Kemas kini nilai dalam DF berdasarkan nama lajur. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan