У меня есть следующие DataFrame
:
geo col1 col2
0 CA A 1
1 CA A 2
2 CA B 1
3 CA B 2
4 CA B 1
5 CA C 1
6 CA C 2
Моя цель - создать новый column
, который скопирует значение из col2
if col2 == 1
и скопирует значение из col1
if col2 == 2
.
Столбец geo включен в изображение, потому что в конечном итоге я хотел бы создать оператор if, который делает описанное выше немного по-разному для 15-20 штатов США.
Конечная цель будет выглядеть так:
geo col1 col2 col3
0 CA A 1 1
1 CA A 2 A
2 CA B 1 1
3 CA B 2 B
4 CA B 1 1
5 CA C 1 1
6 CA C 2 C
3 ответа
Вы можете заключить свои условные операторы копирования в функцию, чтобы сделать различные случаи более управляемыми (см. документы):
def copy_function(row):
if row['col2']==1:
return row['col2']
else:
return row['col1']
df['col3'] = df.apply(copy_function, axis=1)
Вы можете использовать понимание списка:
df['col3'] = [c2 if c2 == 1 else (c1 if c2 == 2 else None)
for c1, c2 in zip(df.col1, df.col2)]
>>> df
geo col1 col2 col3
0 CA A 1 1
1 CA A 2 A
2 CA B 1 1
3 CA B 2 B
4 CA B 1 1
5 CA C 1 1
6 CA C 2 C
Учитывая ваши исключительные случаи, указанные в ваших комментариях, вы также можете использовать iterrows
:
df['col3'] = None
for n, row in df.iterrows():
if row.col2 == 1:
df.ix[n, 'col3'] = row.col2
elif row.col2 == 2:
df.ix[n, 'col3'] = row.col1
# Other cases.
Надеюсь это поможет.
for row in rows:
row['col3'] = row['col1'] if row['col2'] == 2 else row['col2']
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.