热线电话:13121318867

登录
2019-02-25 阅读量: 890
使用.loc - Pandas进行多列分配

我有一个问题,我无法使用'.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()

有谁知道如何使用一个命令分配多个列?

解决办法使用rename与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

0.0000
1
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子