отображать значения в кадре данных в соответствии с диапазонами - PullRequest
1 голос
/ 16 апреля 2020

У меня есть фрейм данных df

import pandas
df = pandas.DataFrame(data=[1,2,3,2,2,2,3,3,4,5,10,11,12,1,2,1,1], columns=['codes'])

 codes
0       1
1       2
2       3
3       2
4       2
5       2
6       3
7       3
8       4
9       5
10     10
11     11
12     12
13      1
14      2
15      1
16      1

, и я хотел бы сгруппировать значения в столбце code в соответствии со спецификацией c logi c:

values == 0 become A
values in the range (1,4) becomes B
values == 5 becomes C
values in the range (6,16) becomes D

есть ли способ разделить логику c и фрейм данных, чтобы в будущем было легко изменить правила группировки? Я хотел бы избежать писать

df.loc[df['code']==0,'code']=A
df.loc[(df['code']>=1 & df['code']<=4),'code']=B

1 Ответ

1 голос
/ 16 апреля 2020

Первая идея - использовать Series.map со словарями слияния, вторая - использовать cut с right=False:

df = pd.DataFrame(data=[0,1,2,3,2,2,2,3,3,4,5,10,11,12,16,2,17,1], columns=['codes'])

d1 = {0: 'A', 5:'C'}
d2 = dict.fromkeys(range(1,5), 'B')
d3 = dict.fromkeys(range(6,17), 'D')

d = {**d1, **d2, **d3}
df['codes1'] = df['codes'].map(d)
df['codes2'] = pd.cut(df['codes'], bins=(0,1,5,6,17), labels=list('ABCD'), right=False)
print (df)
    codes codes1 codes2
0       0      A      A
1       1      B      B
2       2      B      B
3       3      B      B
4       2      B      B
5       2      B      B
6       2      B      B
7       3      B      B
8       3      B      B
9       4      B      B
10      5      C      C
11     10      D      D
12     11      D      D
13     12      D      D
14     16      D      D
15      2      B      B
16     17    NaN    NaN
17      1      B      B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...