Заполнение столбца DataFrame в зависимости от нескольких строк другого столбца - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть DataFrame nplt:

nplt
Out[120]: 
     sexage  npark16cd  population  page
0       M00  E26000001  146.631840   NaN
1       M01  E26000001  122.677630   NaN
2       M02  E26000001  127.645516   NaN
3       M03  E26000001  138.313014   NaN
4       M04  E26000001  150.898252   NaN
5       M05  E26000001  149.086291   NaN
6       M06  E26000001  145.075953   NaN
7       M07  E26000001  159.893446   NaN
8       M08  E26000001  149.886962   NaN
9       M09  E26000001  182.406901   NaN
10      M10  E26000001  182.058425   NaN
11      M11  E26000001  186.962104   NaN
12      M12  E26000001  200.875284   NaN
13      M13  E26000001  209.038917   NaN
14      M14  E26000001  163.530837   NaN
15      M15  E26000001  161.171527   NaN

I wi sh, чтобы заполнить страницу столбца условно по признаку пола, например, где пол равен M00, M01, M02, M03 I w sh page быть p0_3 и где пол равен M04, M05, M06, а i sh страница будет p4_6, непрерывно, например:

nplt
Out[120]: 
     sexage  npark16cd  population  page
0       M00  E26000001  146.631840   p0_3
1       M01  E26000001  122.677630   p0_3
2       M02  E26000001  127.645516   p0_3
3       M03  E26000001  138.313014   p0_3
4       M04  E26000001  150.898252   p4_6
5       M05  E26000001  149.086291   p4_6
6       M06  E26000001  145.075953   p4_6
7       M07  E26000001  159.893446   NaN
8       M08  E26000001  149.886962   NaN
9       M09  E26000001  182.406901   NaN
10      M10  E26000001  182.058425   NaN
11      M11  E26000001  186.962104   NaN
12      M12  E26000001  200.875284   NaN
13      M13  E26000001  209.038917   NaN
14      M14  E26000001  163.530837   NaN
15      M15  E26000001  161.171527   NaN

и так далее. Пол в моем фактическом DataFrame варьируется от M00-M90 до F00-F90.

Есть ли эффективный способ сделать это?

Заранее большое спасибо.

попробуйте объяснить более четко, я бы хотел, чтобы эквивалент для серий F00, F01, F02 и F03 и M00, M01, M02 и M03 имел значение p0_3 на странице, а для M04, M05, M06 и F04, F05 и F06 иметь значение p4_6 для страницы. Например:

nplt
    Out[120]: 
         sexage  npark16cd  population  page
    0       M00  E26000001  146.631840   p0_3
    1       M01  E26000001  122.677630   p0_3
    2       M02  E26000001  127.645516   p0_3
    3       M03  E26000001  138.313014   p0_3
    4       M04  E26000001  150.898252   p4_6
    5       M05  E26000001  149.086291   p4_6
    6       M06  E26000001  145.075953   p4_6
    7       M07  E26000001  159.893446   p7_10
    8       M08  E26000001  149.886962   p7_10
    9       M09  E26000001  182.406901   p7_10
    10      M10  E26000001  182.058425   p7_10
    11      M11  E26000001  186.962104   NaN
    12      M12  E26000001  200.875284   NaN
    13      M13  E26000001  209.038917   NaN
    14      M14  E26000001  163.530837   NaN
    15      M15  E26000001  161.171527   NaN


2355    F80  W18000003  102.553290   nan
2356    F81  W18000003  115.013810   nan
2357    F82  W18000003   94.524735   p82_85
2358    F83  W18000003   77.677229   p82_85
2359    F84  W18000003  103.239723   p82_85
2360    F85  W18000003   82.496796   p82_85
2361    F86  W18000003   71.609379   p86_90
2362    F87  W18000003   83.220993   p86_90
2363    F88  W18000003   80.120960   p86_90
2364    F89  W18000003   65.742056   p86_90
2365    F90  W18000003  204.664775   p86_90

Я бы хотел, чтобы группировки в M00-M90 и F00-F90 (p0_4, p4_6, p7_10 ... p86_90) были одинаковыми. Значения на странице столбца будут выборочными слоями в будущем коде.

Причиной того, что на странице столбца имеется разное количество элементов, является то, что они основаны на возрастных группах, которые имеют различные диапазоны, например, 0-3 , 4-6, 5-7, 8-12, 13, 14-18 ... вплоть до 90.

Я пытался:

nplt.loc[(nplt['sexage'] == {'M00', 'M01', 'M02', 'M03', 'F00', 'F01',
                  'F02', 'F03'}), 'page'] = 'p0_3'

Однако это делает не работа. Любая помощь очень признателен, пожалуйста.

1 Ответ

0 голосов
/ 08 апреля 2020
indexes = {}

for i in range(0, 5):
    indexes[i] = 'p0_4'

for i in range(5, 8):
    indexes[i] = 'p5_7'

nplt['page'] = [indexes.get(x) for x in nplt['age']]

where nplt['age'] = 0 1 2 3 4 5 6 7

nplt
Out[169]: 
     sexage  npark16cd  population    page  age
0       M00  E26000001  146.631840    p0_4    0
1       M01  E26000001  122.677630    p0_4    1
2       M02  E26000001  127.645516    p0_4    2
3       M03  E26000001  138.313014    p0_4    3
4       M04  E26000001  150.898252    p0_4    4
5       M05  E26000001  149.086291    p5_7    5
6       M06  E26000001  145.075953    p5_7    6
7       M07  E26000001  159.893446    p5_7    7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...