首页 > 解决方案 > Pandas 将性别列拆分为两列

问题描述

我有下表: 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 做到这一点,但我一直试图让它与 pandas 一起工作,但没有运气。感谢您的帮助。编辑* 输入:

    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

标签: pythonpandassplitpandas-groupby

解决方案


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  

推荐阅读