Оригінальне запитання стосується конкретного випадку вузького використання. Для тих, хто потребує більш загальних відповідей, ось кілька прикладів:
Створення нового стовпця за допомогою даних з інших стовпців
З огляду на наведений нижче кадр:
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
Нижче ми додаємо новий description
стовпчик як об'єднання інших стовпців, використовуючи +
операцію, яку переосмислюють для рядів. Тут не працюватимуть фантазійні формати рядків, f-рядки тощо, оскільки це +
стосується скалярів, а не "примітивних" значень:
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
Ми отримуємо 1 years
за кота (замість 1 year
) якого ми будемо фіксувати нижче, використовуючи умовні умови.
Модифікація існуючого стовпця за допомогою умовних умов
Тут ми замінюємо вихідний animal
стовпець значеннями з інших стовпців і використовуємо np.where
для встановлення умовної підрядки на основі значення 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
Модифікація декількох стовпців за допомогою умовних умов
Більш гнучкий підхід - дзвінок .apply()
у цілому кадрі даних, а не в одному стовпчику:
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
У наведеному вище коді transform_row(r)
функція приймає Series
об'єкт, що представляє заданий рядок (позначається значенням за axis=1
замовчуванням, axis=0
яке надаватиме Series
об'єкт для кожного стовпця). Це спрощує обробку, оскільки ми можемо отримати доступ до фактичних «примітивних» значень у рядку, використовуючи назви стовпців та мати видимість інших комірок у даному рядку / стовпці.
df.loc[df.ID == 103, ['FirstName', 'LastName']] = 'Matt', 'Jones'