使用Python一次性更改dataframe列值

2024-09-30 18:30:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须在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>

Tags: brmapdata语句restaurantreplacecatmiscellaneous
2条回答

像这样的东西可能会帮助你:

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

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

单一标准

如果只想用“杂项”更新行:

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'])

相关问题 更多 >