枢轴重塑数据框

数据挖掘 Python 熊猫
2022-02-13 21:50:14

我需要帮助重塑从 csv 文件中获得的 DataFrame。

在这个文件中,我有第一列作为 ID,然后有 97 列代表 4 种产品在一段时间内的销售单位。

数据就像

id    p1_201501   p1_201502 ......  p1_201812  p2_201501..... p2_2018012   p3_.. 

x12     125         12        ......  06          500     ..... 14         2...              
nz15     250         16        ......  600         423     ..... 312        56...     
....

Id 代表产品的销售区域。而且我有 700 行(即 700 df['id'].nunique() )所以我需要找到给定产品的年度销售趋势。所以我认为解决方案是更改数据框,以便将年份作为行和每个产品的数量(p1,p2,p3)

就像是:

id    date        p1   p2    p3
x12   201501     12   500   32 
      201502    .... 
      201503    ....
      ....
      201812    .....
nz15  201501    .....
      201502    .....
      .....
      201812    .....

但我不知道在这种情况下找到销售趋势是否是正确的选择,如果是,如何将第一个数据框更改为第二个我知道一些关于枢轴重塑的信息。但是我找不到如何做以及如何保留id(产品销售区域)

请问有什么帮助吗?

1个回答

我的初始数据框:

     id  p1_201501  p1_201502  p1_201803  p2_201801  p2_201812
0   x12        125         12          6        500         14
1  nz15        250         16        600        423         32
2  qz15        350          4         20        223         32

我的程序:

import pandas as pd

df = pd.melt(df, id_vars=["id"], var_name="product", value_name="values").reset_index(drop=True)
df['date'] = df['product'].str.split('_',n = 1, expand=True)[1]
df['year'] = df['date'].astype(str).str[:-2]
df['month'] = df['date'].astype(str).str[4:]

#drop unused columns
df.drop(['product','date'],axis=1,inplace=True)

df = df[['id', 'year','month','values']]
df = df.sort_values(['id', 'year','month'], ascending=[True,True,True]).reset_index(drop=True)
df.set_index(['id','year','month'])

#just sum each annual total sales for each id
df = df.groupby(['id','year'])['values'].sum()

print(df)

最后结果:

id    year
nz15  2015     266
      2018    1055
qz15  2015     354
      2018     275
x12   2015     137
      2018     520