Pertanyaan asli membahas kasus penggunaan sempit tertentu. Bagi mereka yang membutuhkan jawaban yang lebih umum, berikut beberapa contohnya:
Membuat kolom baru menggunakan data dari kolom lain
Diberikan dataframe di bawah ini:
import pandas as pd
import numpy as np
df = pd.DataFrame([['dog', 'hound', 5],
['cat', 'ragdoll', 1]],
columns=['animal', 'type', 'age'])
In[1]:
Out[1]:
animal type age
----------------------
0 dog hound 5
1 cat ragdoll 1
Di bawah ini kami menambahkan descriptionkolom baru sebagai rangkaian kolom lain dengan menggunakan +operasi yang diganti untuk seri. Pemformatan string mewah, f-string, dll. Tidak akan berfungsi di sini karena +berlaku untuk skalar dan bukan nilai 'primitif':
df['description'] = 'A ' + df.age.astype(str) + ' years old ' \
+ df.type + ' ' + df.animal
In [2]: df
Out[2]:
animal type age description
-------------------------------------------------
0 dog hound 5 A 5 years old hound dog
1 cat ragdoll 1 A 1 years old ragdoll cat
Kami mendapatkan 1 yearsuntuk kucing (bukan 1 year) yang akan kami perbaiki di bawah ini menggunakan kondisional.
Mengubah kolom yang sudah ada dengan kondisional
Di sini kami mengganti animalkolom asli dengan nilai dari kolom lain, dan menggunakan np.whereuntuk mengatur substring bersyarat berdasarkan nilai age:
# append 's' to 'age' if it's greater than 1
df.animal = df.animal + ", " + df.type + ", " + \
df.age.astype(str) + " year" + np.where(df.age > 1, 's', '')
In [3]: df
Out[3]:
animal type age
-------------------------------------
0 dog, hound, 5 years hound 5
1 cat, ragdoll, 1 year ragdoll 1
Mengubah beberapa kolom dengan kondisional
Pendekatan yang lebih fleksibel adalah dengan memanggil .apply()seluruh kerangka data daripada pada satu kolom:
def transform_row(r):
r.animal = 'wild ' + r.type
r.type = r.animal + ' creature'
r.age = "{} year{}".format(r.age, r.age > 1 and 's' or '')
return r
df.apply(transform_row, axis=1)
In[4]:
Out[4]:
animal type age
----------------------------------------
0 wild hound dog creature 5 years
1 wild ragdoll cat creature 1 year
Dalam kode di atas transform_row(r)fungsi mengambil Seriesobjek yang mewakili baris tertentu (ditunjukkan oleh axis=1, nilai default axis=0akan menyediakan Seriesobjek untuk setiap kolom). Ini menyederhanakan pemrosesan karena kita dapat mengakses nilai 'primitif' aktual di baris menggunakan nama kolom dan memiliki visibilitas sel lain di baris / kolom tertentu.
df.loc[df.ID == 103, ['FirstName', 'LastName']] = 'Matt', 'Jones'