![](/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.