繁体   English   中英

Pandas groupby两列,一个按行,一个按列

[英]Pandas groupby two columns, one by row and another by column

我有一个 csv 文件,其中包含 n 行房屋销售情况。

房子 户型 销售年份
2010
平坦的 2011年
平房 2012
2013年
2013年

我想按 sale_year(2010、2011 等)按 House_type(平房、平房、半独立屋)对数据进行分组,算作列。 所以我正在尝试 output 以下格式的数据。

户型 2010 2011年 2012 2013年
1个 0 0 2个
平坦的 0 1个 0 0
平房 0 0 1个 0

但是,当我运行代码时,它会将 House_type 和 Sale_year 作为两列返回。

house= housedata.groupby(["House_type", "Sale_year"])["Sale_year"].count()
house

House_type               Sale_year
Flat                     2011.0          1
bungalow                 2012.0          1
Semi                     2010.0          1
                         2013.0          2

如何获取 pandas 到 output 所需的数据?

非常感谢

您可以使用 pandas 的 get_dummies 方法实现相同的效果。它基本上为分类列创建多个列并用值填充它。

df = pd.DataFrame({'House_type':['Semi','Flat','Bungalow','Semi','Semi'],'sale_year':[2010,2011,2012,2013,2013]})
df_final = pd.get_dummies(df,columns=['sale_year']).groupby('House_type').sum()
df_final

您可以在此处使用pivot_table

result = pd.pivot_table(df, index='House_type', columns='Sale_year',
                        aggfunc='count', fill_value=0)

它直接给出:

           House               
Sale_year   2010 2011 2012 2013
House_type                     
Flat           0    1    0    0
Semi           1    0    0    2
bungalow       0    0    1    0

如果你愿意,你可以稍微格式化一下:

result.columns = result.columns.get_level_values(1).rename(None)
result = result.reset_index()

最终得到:

  House_type  2010  2011  2012  2013
0       Flat     0     1     0     0
1       Semi     1     0     0     2
2   bungalow     0     0     1     0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM