Groupby рассчитывать на несколько условий и нескольких столбцов панд - PullRequest
1 голос
/ 23 сентября 2019

У меня есть кадр данных, как показано ниже.

ID  Ownwer_ID   Building   Nationality  Age   Sector
1   2           Villa      India        24    SE1
2   2           Villa      India        28    SE1
3   4           Apartment  USA          82    SE2
4   4           Apartment  USA          68    SE2
5   7           Villa      UK           32    SE2
6   7           Villa      UK           28    SE2
7   7           Villa      UK            4    SE2
8   8           LabourCamp Pakistan     27    SE3
9   2           Villa      India        1     SE1
10  10          LabourCamp India        23    SE2
11  11          Apartment  Germany      34    SE3

В приведенном выше идентификаторе данных уникален, который представляет человека.

Из приведенного выше кадра данных я хотел бы подготовить ниже данных кадров

Sector   #Age_0-12  #Agemore70   #Asians  #Europe  #USA  #Asians_LabourCamp #USA_Apartment
SE1      1          0            3        0        0     0                  0
SE2      1          1            1        3        2     1                  2
SE3      0          0            1        1        0     1                  0

, где азиатов я считал национальностью Индия или Пакистан.Европа = национальность Великобритания или Германия.

# Возраст_0-12 = Количество людей в возрасте от 0 до 12 лет (включительно)

# Agemore70 = Число людей, имеющих возраст более или равный 70

аналогично, во всех остальных столбцах указано количество людей, объясненных их именем.

Я попробовал следующий код

d = {'India': 'Asians', 'Pakistan': 'Asians', 'UK': 'Europe', 'Germany': 'Europe',
'USA': 'USA'}
df['natinality_Group'] = df['Nationality'].map(d)

bins = [-1, , 12, , 21, 50, 100]
df['binned_age'] = pd.cut(df['Age'], bins)

После этого я ничего не понял, пожалуйста, помогите мне, если выесть решение?

1 Ответ

1 голос
/ 23 сентября 2019

Давайте попробуем это, используя pd.cut для получения возрастных групп и pd.get_dummies с groupby для получения значений каждого значения в выбранных столбцах:

df['Age Group'] = pd.cut(df['Age'],[0,12,70,np.inf],labels=['Age_0-12','Age_12-70','Agemore70'])


df_out = pd.get_dummies(df[['Sector','Building', 'Age Group', 'Nationality']], 
                        columns=['Age Group', 'Building', 'Nationality'], 
                        prefix='#', prefix_sep='').groupby('Sector').sum()

Вывод:

       #Age_0-12  #Age_12-70  #Agemore70  #Apartment  #LabourCamp  #Villa  \
Sector                                                                       
SE1             1           2           0           0            0       3   
SE2             1           4           1           2            1       3   
SE3             0           2           0           1            1       0   

        #Germany  #India  #Pakistan  #UK  #USA  
Sector                                          
SE1            0       3          0    0     0  
SE2            0       1          0    3     2  
SE3            1       0          1    0     0  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...