首页 > 解决方案 > 将列拆分并转换为聚合列

问题描述

我拥有的数据如下所述:

输入:

df = pd.DataFrame({"col1": ["A1", "A2"], "col2": ["B1", "B2"], "2015-1": [231, 432], "2015-2": [456, 324]})
print(df)
  col1 col2  2015-1  2015-2
0   A1   B1     231     456
1   A2   B2     432     324

2015-12015-2对应于年和月。我要转换的数据如下:

输出:

print(df)
  col1 col2  year    month  values
0   A1   B1  2015        1     231
1   A1   B1  2015        2     456
2   A2   B2  2015        1     432
3   A2   B2  2015        2     324

我想在不构建循环的情况下将数据转换为另一个数据帧,因为我拥有的数据包含很多列和行,这需要很长时间。有什么方法可以在没有循环的情况下将输入转换为输出?

标签: pythonpandasdataframe

解决方案


我们可以meltsplitthen joinback

s=df.melt(['col1','col2'])
s=s.join(s.variable.str.split('-',expand=True).rename(columns={0:'Year',1:'Month'}))
  col1 col2 variable  value  Year Month
0   A1   B1   2015-1    231  2015     1
1   A2   B2   2015-1    432  2015     1
2   A1   B1   2015-2    456  2015     2
3   A2   B2   2015-2    324  2015     2

推荐阅读