Панды разделить пол столбца на две колонки - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть следующая таблица: https://ibb.co/DMGCgD2

Я хочу разделить (тип свойства) на два столбца count_Single_Family и count_Multi_Family в каждом почтовом индексе:

Я использовал этот код, но я неНе знаю, что делать дальше:

b=Combineddf[Combineddf['Property Type']=='Multi-Family'].count() a=Combineddf[Combineddf['Property Type']=='Single Family'].count()

Я могу сделать это с помощью sql, но я продолжаю пытаться заставить его работать с пандами, но не повезло.Спасибо вам за помощь.Редактировать * Ввод:

    import pandas as pd
input= pd.DataFrame({'Zip Code': [90001, 90001, 90001,90002,90002,90002], 
                   'Total Males': [28468, 28468, 28468,43533,43533,43533],
                  'Total Female': [32135, 32135, 32135,54354,54354,54354],
                   'Property Type': ['Multi-Family', 'Multi-Family', 'Single Family','Single Family','Single Family','Multi-Family']
                  })
input

Желаемый вывод:

    out = pd.DataFrame({'Zip Code': [90001, 90001, 90001,90002,90002,90002], 
                       'Total Males': [28468, 28468, 28468,43533,43533,43533],
                      'Total Female': [32135, 32135, 32135,54354,54354,54354],
                       'Multi-Family': [2, 2, 2,1,1,1],
                       'Single Family': [1, 1, 1,2,2,2],

                      })
out

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Другое решение:

(pd.concat([input.set_index('Zip Code'), 
            input.groupby('Zip Code')['Property Type']
                 .value_counts()
                 .unstack()], axis=1)
).reset_index()

   Zip Code  Total Males  Total Female  Property Type  Multi-Family  Single Family
0     90001        28468         32135   Multi-Family             2              1
1     90001        28468         32135   Multi-Family             2              1
2     90001        28468         32135  Single Family             2              1
3     90002        43533         54354  Single Family             1              2
4     90002        43533         54354  Single Family             1              2
5     90002        43533         54354   Multi-Family             1              2
0 голосов
/ 26 ноября 2018

pd.crosstab + merge

У Pandas есть метод кросс-таблицы на основе индекса и значений.Затем вам нужно только объединить эти результаты с вашим исходным фреймом данных.

df_cross = pd.crosstab(df['Zip Code'], df['Property Type'])

res = df.merge(df_cross, left_on='Zip Code', right_index=True)

print(res)

   Zip Code  Total Males  Total Female  Property Type  Multi-Family  \
0     90001        28468         32135   Multi-Family             2   
1     90001        28468         32135   Multi-Family             2   
2     90001        28468         32135  Single Family             2   
3     90002        43533         54354  Single Family             1   
4     90002        43533         54354  Single Family             1   
5     90002        43533         54354   Multi-Family             1   

   Single Family  
0              1  
1              1  
2              1  
3              2  
4              2  
5              2  
0 голосов
/ 26 ноября 2018

Это похоже на правильное решение:

v = input.groupby(['Zip Code','Property Type']).count().reset_index().pivot(index='Zip Code',columns = 'Property Type',values = 'Total Males')

pd.merge(input,v, how = 'inner', left_on = 'Zip Code', right_on ='Zip Code').drop('Property Type',axis = 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...