Python 使用.loc-Pandas分配多列

Python 使用.loc-Pandas分配多列,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,我有一个问题,无法使用“.loc”分配多个列 我想用一条线来做 示例 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_C

我有一个问题,无法使用“.loc”分配多个列
我想用一条线来做

示例

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']
数据帧输入:

    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
数据帧输出:

    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


谢谢。

对于具有lambda函数的相同列名,请使用
重命名

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