带有枚举箱的pandas.cut

时间:2016-01-15 09:19:28

标签: python pandas mapping binning

让我们说我有以下数据(这是我的实际数据的简化但准确的表示):

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中是否有一些功能,或者我缺少一个简单的解决方法?

2 个答案:

答案 0 :(得分:1)

以下多对一映射适用于您:

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

答案 1 :(得分:1)

正如EdChum已经指出的那样,地图就是这里的方式

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