Orijinal soru, belirli bir dar kullanım durumuna yöneliktir. Daha genel yanıtlara ihtiyaç duyanlar için işte bazı örnekler:
Diğer sütunlardaki verileri kullanarak yeni bir sütun oluşturma
Aşağıdaki veri çerçevesi göz önüne alındığında:
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
Aşağıda , seriler için geçersiz kılınan işlemi description
kullanarak diğer sütunların birleşimi olarak yeni bir sütun ekliyoruz +
. Süslü dize biçimlendirmesi, f dizeleri vb. Burada çalışmaz çünkü +
skalarlar için geçerlidir ve 'ilkel' değerler için geçerli değildir:
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
Biz almak 1 years
kedi (yerine için 1 year
biz conditionals kullanarak aşağıdaki sabitleme edilecektir).
Mevcut bir sütunu koşullularla değiştirme
Burada, orijinal animal
sütunu diğer sütunlardan değerlerle değiştiriyoruz ve np.where
aşağıdakilerin değerine dayalı bir koşullu alt dize ayarlamak için kullanıyoruz 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
Koşullu birden çok sütunu değiştirme
Daha esnek bir yaklaşım, .apply()
tek bir sütun yerine tüm bir veri çerçevesini çağırmaktır :
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
Yukarıdaki kodda, transform_row(r)
işlev Series
belirli bir satırı temsil eden bir nesneyi alır (ile gösterilir axis=1
, varsayılan değeri her sütun için axis=0
bir Series
nesne sağlayacaktır ). Sütun adlarını kullanarak satırdaki gerçek 'ilkel' değerlere erişebildiğimiz ve verilen satır / sütundaki diğer hücrelerin görünürlüğüne sahip olduğumuz için bu, işlemeyi kolaylaştırır.
df.loc[df.ID == 103, ['FirstName', 'LastName']] = 'Matt', 'Jones'