Назначение нескольких столбцов с использованием .loc - Pandas - PullRequest
0 голосов
/ 23 февраля 2019

У меня проблема с тем, что я не могу назначить несколько столбцов, используя '.loc'.
Я хотел бы сделать это, используя одну строку.

Пример

Ввод DataFrame:

    NAME   AGE  NEW_AGE COUNTRY NEW_COUNTRY     _merge
0  LUCAS  80.0      NaN  BRAZIL         NaN  left_only
1  STEVE   NaN     35.0     NaN         USA       both
2    BEN   NaN     25.0              CANADA       both

Ввод DataFrame:

    NAME   AGE  NEW_AGE COUNTRY NEW_COUNTRY     _merge
0  LUCAS  80.0      NaN  BRAZIL         NaN  left_only
1  STEVE  35.0     35.0     USA         USA       both
2    BEN  25.0     25.0  CANADA      CANADA       both

Код

import pandas as pd

people = pd.DataFrame(
    {'NAME': ['LUCAS', 'STEVE', 'BEN'],
     'AGE': [80, pd.np.nan, pd.np.nan],
     'NEW_AGE': [pd.np.nan, 35, 25],
     'COUNTRY': ['BRAZIL', pd.np.nan, ''],
     'NEW_COUNTRY': [pd.np.nan, 'USA', 'CANADA'],
     '_merge': ['left_only', 'both', 'both']
     })


people.loc[people['_merge'] == 'both', 'AGE'] = people['NEW_AGE']
people.loc[people['_merge'] == 'both', 'COUNTRY'] = people['NEW_COUNTRY']

Я пробовал этот способ, но он не работает.

# USING ONLY ONE DOESNT WORK
people.loc[people['_merge'] == 'both', ['AGE', 'COUNTRY']] = \
 people[['NEW_AGE', 'NEW_COUNTRY']]

# USING TO_NUMPY CAUSE OF http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html
people.loc[people['_merge'] == 'both', ['AGE', 'COUNTRY']] = \
 people[['NEW_AGE', 'NEW_COUNTRY']].to_numpy()

Кто-нибудь знает, как назначить несколько столбцов с помощью одной команды?

Панды: 0.24.1

Спасибо.

1 Ответ

0 голосов
/ 23 февраля 2019

Используйте rename для тех же имен столбцов с лямбда-функцией:

f = lambda x: x.replace('NEW_','')
df = people[['NEW_AGE', 'NEW_COUNTRY']].rename(columns=f)
people.loc[people['_merge'] == 'both', ['AGE', 'COUNTRY']] = df
print (people)
    NAME   AGE  NEW_AGE COUNTRY NEW_COUNTRY     _merge
0  LUCAS  80.0      NaN  BRAZIL         NaN  left_only
1  STEVE  35.0     35.0     USA         USA       both
2    BEN  25.0     25.0  CANADA      CANADA       both
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...