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

Kemas kini nilai dalam DF berdasarkan nama lajur

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2024-02-09 13:00:15
ke hadapan
690 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!

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