问题描述
我希望这个问题很清楚,但是我正在调查Zillow房屋销售数据,并且遇到了一个问题,即能够将某些年份的所有月份合并到新声明的“ Year”变量中。本质上,这应该将所有具有Jan-YY,Feb-YY,Mar-YY ... etc的数据存储到YY。
我曾经尝试过内置 Stack()和 Pivot()之类的函数的Pandas,但这些似乎没有用。
示例: 取Column1 = '1/31/1996'和Column2 = '2/28/1996' ...等等。和Column12 = '12 / 31/1996'合并成一个新的 列为 Y1996 。这将比每月细分更容易分析。
我的代码:
<button class="buy-button">Buy Button</button>
Screen shot of how data is formatted via excel -- Starts on Column I
对Zillow数据的引用: https://www.zillow.com/research/data/
解决方法
我认为您需要一个枢轴的对立面-melt。您具有“宽”格式的数据,如果将数据转换为“高”格式,则执行此摘要会更容易。一旦获得高格式数据,就可以使用groupby对同一年内的值求和。
我下载了房屋库存和销售数据集,并编写了一个简短的程序来汇总同一年的所有值。
代码:
import pandas as pd
df = pd.read_csv("Metro_invt_fs_uc_sfrcondo_smoothed_month.csv")
# Take all of the columns after the index and convert them into additional rows
df = df.melt(id_vars=["RegionID","SizeRank","RegionName","RegionType","StateName"],var_name="Date")
# Drop date,but keep year
df["Year"] = pd.to_datetime(df["Date"]).dt.year
df = df.drop("Date",axis="columns")
# Aggregate each year
df = df.groupby(["RegionID","StateName","Year"],as_index=False).sum()
print(df)
输出:
RegionID SizeRank RegionName RegionType StateName Year value
0 394304 74 Akron,OH Msa OH 2017 3576.0
1 394304 74 Akron,OH Msa OH 2018 42625.0
2 394304 74 Akron,OH Msa OH 2019 39078.0
3 394304 74 Akron,OH Msa OH 2020 21532.0
4 394308 60 Albany,NY Msa NY 2017 2969.0
.. ... ... ... ... ... ... ...
475 753906 75 North Port-Sarasota-Bradenton,FL Msa FL 2020 73953.0
476 753924 54 Urban Honolulu,HI Msa HI 2017 3735.0
477 753924 54 Urban Honolulu,HI Msa HI 2018 50079.0
478 753924 54 Urban Honolulu,HI Msa HI 2019 57413.0
479 753924 54 Urban Honolulu,HI Msa HI 2020 35522.0
[480 rows x 7 columns]