使用Python一次更改数据框列值

时间:2018-07-25 11:14:16

标签: python pandas dataframe

我必须一口气在python中进行以下更改。我们可以使用replace / map在一个语句中做到吗?

data['CATEGORY'][(data.CATEGORY == 'Miscellaneous') & (data.SUB_CAT == 'Helipad')] = "Transport Services" <br>
data['CATEGORY'][(data.CATEGORY == 'Miscellaneous') & (data.SUB_CAT == 'Restaurant')] = "Fooding & Lodging Services" <br>
data['CATEGORY'][(data.CATEGORY == 'Miscellaneous') & (data.SUB_CAT == 'Pharmacy')] = "Emergency Services" <br>
data['CATEGORY'][(data.CATEGORY == 'Miscellaneous') & (data.SUB_CAT == 'Blood Bank')] = "Emergency Services" <br>
data['CATEGORY'][(data.CATEGORY == 'Miscellaneous') & (data.SUB_CAT == 'Godown')] = "Commercial Services" <br>
data['CATEGORY'][(data.CATEGORY == 'Miscellaneous') & (data.SUB_CAT == 'Factory')] = "Industries" <br>

2 个答案:

答案 0 :(得分:0)

类似的事情可能会帮助您:

l = [('Helipad', "Transport Services"), ...]

for item in l:
    data['CATEGORY'][(data.CATEGORY == 'Miscellaneous') & (data.SUB_CAT == item[0])] = item[1] 

答案 1 :(得分:0)

单个条件

如果您只想用“其他”更新行:

d = {'Helipad': 'Transport Services',
     'Restaurant': 'Fooding & Lodging Services'}

mask = data['CATEGORY'] == 'Miscellaneous'
df.loc[mask, 'CATEGORY'] = df.loc[mask, 'SUB_CAT'].map(d)

多个条件

使用结构将条件映射到值的字典来构建:

d = {('Miscellaneous', 'Helipad'): 'Transport Services',
     ('Miscellaneous', 'Restaurant'): 'Fooding & Lodging Services'}

然后使用pd.Series.map

# extract series of tuples
tups = data.set_index(['CATEGORY', 'SUB_CAT']).index.to_series()
# alternatively:
# tups = pd.Series(list(zip(data['CATEGORY'], data['SUB_CAT'])))

# map series to values
data['CATEGORY'] = tups.map(d).fillna(data['CATEGORY'])