簡體   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