pandas.cut 带有枚举 bin

pandas.cut with enumerated bins

假设我有以下数据(这是对我的实际数据的简化但准确的表示):

df 
    Age   Country
0    10     1
1    15     2
2    20     3
3    25     1
4    30     2
5    15     3
6    20     3
7    15     4
8    20     4

我想用pandas.cut将bin国家1和3变成bin1,把国家2和4变成bin2。使用预设数量的分箱和边缘分箱都不起作用。在某些可能的世界中,这将通过以下代码来实现,不幸的是,在现实世界中,这些代码恰好是错误的:

conts = [‘Africa’, ‘Asia’]
bins = [[1,3], [2,4]]
df['Continent'] = pd.cut(df['Country'], bins, labels = conts)

pandas 中是否有一些功能,或者我缺少一个简单的解决方法?

以下 many-to-one 映射适合您:

dc = {(1,3):'Africa', (2,4):'Asia'}

dc_={}
for keys,v in dc.items():
    for k in keys:
        dc_[k]=v

df['Continent'] = df['Country'].map(dc_)

df

    Age Country Continent
0   10  1   Africa
1   15  2   Asia
2   20  3   Africa
3   25  1   Africa
4   30  2   Asia
5   15  3   Africa
6   20  3   Africa
7   15  4   Asia
8   20  4   Asia

正如 EdChum 已经指出的那样,地图是前往此处的方式

continent_lookup = {1: 'Africa', 2: 'Asia', 3: 'Africa', 4: 'Asia'}
df['Continent'] = df.Country.map(continent_lookup)