我有一个数据集,如下所示:
Name County Industry Jobs.2019 Jobs.2018 Establish.2019 Establish.2018 EPW.2019 EPW.2018
rows_0 Adams, OH Auto 1 2 3 4 5 6
row_1 Allen, OH Mfg 2 3 5 7 9 10
...
row_100 Adams,OH IT 5 32 1 87 8 9最后,我想转换成一种很长的格式,比如:
Name County Industry Jobs Establish EPW Year
rows_0 Adams, OH Auto 1 3 5 2019
rows_1 Adams, OH Auto 2 4 6 2018
rows_2 Allen, OH Mfg 1 5 9 2019我可以用melt将其转换为长格式:
data_df_unpivot = data_df.melt(id_vars=['County', 'Industry'], var_name=['metric'], value_name='value')但这实际上只为我提供了格式:
County Industry metric value
Adams, OH Auto Jobs.2019 1
Adams, OH Auto Jobs.2018 2
Adams, OH Auto EPW.2019 5
Adams, OH Auto EPW.2018 6我知道我需要对Jobs.2019等进行拆分,但不确定在此之后该如何将其转换为适当的格式。
所有数据都来自API,并且是嵌套的JSON,我必须对其进行扁平化。最终目标是加载到SQL中,所以我想知道我是用Python做ETL还是让Snowflake处理,无论哪种方式,我都面临着拉长表格的相同问题。
随着数据的出来,这也将是一个活生生的表格,即Jobs.2020,Jobs.2021
发布于 2020-08-18 23:01:19
答案就在你的标题中:使用pd.wide_to_long。
print (pd.wide_to_long(df, stubnames=["Jobs","Establish","EPW"],
i=["Name","County","Industry"],
j="Year", sep=".", suffix="\d+")
.reset_index())
Name County Industry Year Jobs Establish EPW
0 row_0 Adams, OH Auto 2019 1 3 5
1 row_0 Adams, OH Auto 2018 2 4 6
2 row_1 Allen, OH Mfg 2019 2 5 9
3 row_1 Allen, OH Mfg 2018 3 7 10
4 row_100 Adams, OH IT 2019 5 1 8
5 row_100 Adams, OH IT 2018 32 87 9https://stackoverflow.com/questions/63470659
复制相似问题