Pandas 按两列分组,一列按行,另一列按列

发布于 2025-01-12 05:34:16 字数 2354 浏览 0 评论 0原文

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

房屋House_typeSale_year
一个2010 年
两个平房2011 年
三个平房2012
年四个2013 年
5 个2013

我想按 House_type(公寓、平房、半)按 sale_year(2010、2011 等)对数据进行分组算作列。 所以我尝试以以下格式输出数据。

House_type2010201120122013
Semi1002
Flat0100
Bungalow0010

但是,当我运行代码时,它会返回 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 输出所需的数据?

非常感谢

I have a csv file that contains n rows of sales of houses.

HouseHouse_typeSale_year
OneSemi2010
twoFlat2011
threebungalow2012
fourSemi2013
fiveSemi2013

I want to groupby the data by House_type (flat, bungalow, semi) by sale_year (2010,2011,etc) counts as columns.
So I'm trying to output the data in the below format.

House_type2010201120122013
Semi1002
Flat0100
bungalow0010

However, when I run the code, it returns both House_type and Sale_year as two columns.

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

How do I get pandas to output the data desired?

Many thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

似最初 2025-01-19 05:34:16

您可以使用 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

You can achieve the same using get_dummies method of pandas. It basically creates multiple columns for a categorical column and fills it with values.

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
一直在等你来 2025-01-19 05:34:16

您可以在这里使用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

You can use pivot_table here:

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

It gives directly:

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

You can format it a little if you want:

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

to finally get:

  House_type  2010  2011  2012  2013
0       Flat     0     1     0     0
1       Semi     1     0     0     2
2   bungalow     0     0     1     0
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文