![](/img/trans.png)
[英]Construct new column with first row of a groupby with two columns - Pandas
[英]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.