Pandas把性别栏分成两栏

2024-05-29 04:51:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下表: https://ibb.co/DMGCgD2

我想在每个邮政编码中将(属性类型)拆分为两列count_Single_族和count_Multi_族:

我用了这个代码,但我不知道下一步该怎么做:

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

期望输出:

^{pr2}$

Tags: httpspandasinputtypecountpropertyfamilymulti
3条回答

^{}+^{}

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  

这似乎产生了正确的解决方案:

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)

另一种解决方案:

(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

相关问题 更多 >

    热门问题