有没有更有效的方法将映射应用到Pandas系列?

2024-09-27 07:26:54 发布

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

在我的数据框中有一列叫做“State”。它包含美国各州的缩写。我有硬编码的地区,我想为每个州创建一个带有地区的新列。你知道吗

我曾经pd系列应用(),但我想知道是否有一个更好的做法,这种类型的映射。关于如何改进代码有什么建议吗?你知道吗

这是我目前的代码,但我只是对最佳实践的建议开放。你知道吗

def get_region(s, *regions):
    if s in regions[0]:
        return 'west'
    elif s in regions[1]:
        return 'midwest'
    elif s in regions[2]:
        return 'south'
    elif s in regions[3]:
        return 'northeast'
    else:
        return None

west = ['WA','OR','CA','ID','NV','MT','WY','UT','AZ','CO','NM']
midwest = ['ND','MN','WI','MI','SD','NE','KS','IA','MO','IL','IN','OH']
south = ['TX','OK','AR','LA','MS','TN','KY','AL','GA','FL','SC','NC','VA','WV','MD','DE']
northeast = ['PA','NJ','NY','CT','MA','RI','VT','NH','ME']

regions = [west,midwest,south,northeast]

full_df['Region'] = full_df['State'].apply(get_region, args=regions)
full_df['Region'].head(15)

Out:
0          west
1       midwest
2         south
3         south
4       midwest
5          west
6         south
7         south
8          west
9       midwest
10        south
11    northeast
12    northeast
13         west
14         west
Name: Region, dtype: object

Tags: 代码indfreturn建议region地区full
2条回答

您可以尝试创建dict并将其映射到列:

west_dict = {i:"west" for i in west}
midwest_dict = {i:"midwest" for i in midwest}
south_dict = {i:"south" for i in south}
northeast_dict = {i:"northeast" for i in northeast}
d = {**west_dict, **midwest_dict, **south_dict, **northeast_dict}
full_df['Region'] = full_df['State'].map(d)

检查map

s=pd.DataFrame([west,midwest,south,northeast],index=['west','midwest','south','northeast'])
s=s.reset_index().melt('index')
full_df['Region'] = full_df['State'].map(dict(zip(s['value'],s['index'])))

相关问题 更多 >

    热门问题