원래 질문은 특정 좁은 사용 사례를 다룹니다. 더 일반적인 답변이 필요한 사람들을 위해 다음과 같은 몇 가지 예가 있습니다.
다른 열의 데이터를 사용하여 새 열 만들기
아래 데이터 프레임이 주어지면 :
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'