0

我有一个如下所示的数据集:

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

4

1 回答 1

0

答案就在你的标题中:使用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    9
于 2020-08-18T15:01:18.830 回答