如何解决有没有一种方法可以在Pandas中组合多个列,这些列可以将某些列中的所有数据合并为一列12列到1列
我希望这个问题很清楚,但是我正在调查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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。