如果满足条件,则使用另一列中的行值替换行值

时间:2018-05-13 17:29:00

标签: python-3.x pandas dataframe data-manipulation

我想替换pandas中的行值。

import pandas as pd
import numpy as np
data = {'type': ['place', 'home', 'place', 'walk', 'place', 'work', 'home', 'place'],'labels': ['NaN', 'NaN', 'shop', 'Nan', 'clinic', 'NaN', 'NaN', 'NaN']}
a = pd.DataFrame(data, columns = ['type', 'labels'])

是否有可能将['类型']替换为['标签']只有['标签']不是np的条件? .NaN和['类型'] =='地点'用熊猫?

如果可能的话,我更愿意使用df.loc []。

1 个答案:

答案 0 :(得分:2)

首先,您提供的数据实际上不是np.NaN,而是仅以不同方式处理的字符串'NaN''Nan'。如果这是你的出发点,你可以这样做:

a['labels'] = a['labels'].str.lower().replace('nan', np.NaN)

然后定义您的mask并替换:

mask = (a['labels'].notnull()) & (a['type'] == 'place') 
df.loc[mask, 'type'] = df.loc[mask, 'labels']

     type  labels
0   place     NaN
1    home     NaN
2    shop    shop
3    walk     NaN
4  clinic  clinic
5    work     NaN
6    home     NaN
7   place     NaN

或者,使用上面定义的相同mask,您可以使用numpy.where

a['type'] = np.where(mask, a['labels'], a['type'])