Saya mengalami kesulitan mencari tahu cara mengulangi variabel dalam kerangka data panda dan melakukan fungsi aritmatika yang sama pada masing-masing variabel.

Saya memiliki kerangka data df yang berisi tiga variabel numerik x1, x2 dan x3. Saya ingin membuat tiga variabel baru dengan mengalikan masing-masing dengan 2. Inilah yang saya lakukan:

existing = ['x1','x2','x3']
new = ['y1','y2','y3']

for i in existing:
    for j in new:
        df[j] = df[i]*2

Kode di atas sebenarnya membuat tiga variabel baru y1, y2 dan y3 dalam kerangka data. Tetapi nilai y1 dan y2 diganti dengan nilai y3 dan ketiga variabel memiliki nilai yang sama, sesuai dengan nilai y3. Saya tidak yakin apa yang saya lewatkan.

Sangat menghargai setiap bimbingan / saran. Terima kasih.

0
navi 16 Januari 2021, 17:33

3 jawaban

Jawaban Terbaik

Anda mengulang sesuatu seperti 9 kali di sini - 3 kali untuk setiap kolom, dengan setiap iterasi menimpa yang sebelumnya.

Anda mungkin menginginkan sesuatu seperti

for e, n in zip(existing,new):
    df[n] = df[e]*2
2
Chris 16 Januari 2021, 14:38

Anda dapat menggabungkan DataFrame asli dengan kolom dengan nilai ganda:

cols_to_double = ['x0', 'x1', 'x2']
new_cols = list(df.columns) + [c.replace('x', 'y') for c in cols_to_double]

df = pd.concat([df, 2 * df[cols_to_double]], axis=1, copy=True)
df.columns = new_cols

Jadi, jika input Anda df Dataframe adalah:

   x0  x1  x2  other0  other1
0   0   1   2       3       4
1   0   1   2       3       4
2   0   1   2       3       4
3   0   1   2       3       4
4   0   1   2       3       4

Setelah menjalankan baris sebelumnya, Anda mendapatkan:

   x0  x1  x2  other0  other1  y0  y1  y2
0   0   1   2       3       4   0   2   4
1   0   1   2       3       4   0   2   4
2   0   1   2       3       4   0   2   4
3   0   1   2       3       4   0   2   4
4   0   1   2       3       4   0   2   4

Berikut kode untuk membuat df:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    data=np.column_stack([np.full((5,), i) for i in range(5)]),
    columns=[f'x{i}' for i in range(3)] + [f'other{i}' for i in range(2)]
)
0
PieCot 16 Januari 2021, 15:54

Saya akan melakukan sesuatu yang lebih umum

#existing = ['x1','x2','x3']
exisiting = df.columns
new = existing.replace('x','y') 
#maybe you need map+lambda/for for each existing string

for (ind_existing, ind_new) in zip(existing,new):
    df[new[ind_new]] = df[existing[ind_existing]]*2 
#maybe there is more elegant way by using pandas assign function
0
Almogx3 16 Januari 2021, 14:40