在 Pandas 的不同列上创建几个值

vev*_*man 0 python pivot pandas

我有一周级别的数据,我想将其放入一列。这是输入 在此处输入图片说明

这是我希望输出的样子: 在此处输入图片说明

样品

print (df)
     Week  Category   Sales
0  202001    Red      100
1  202001    White    200
2  202002    Red      300
3  202002    White    700
4  201901    Red      800
5  201901    White    900
6  201902    Red      100
7  201902    White    200
Run Code Online (Sandbox Code Playgroud)

样品

输出:

     Week  Category   2019  2020
0    1     Red        800   100
1    1     White      900   900
2    2     Red        100   300
3    2     White      200   700
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 5

您可以使用模数和整数除法来提取years 和week,创建 MultiIndex byDataFrame.set_index和最后重塑 bySeries.unstack将索引转换为列并删除列名DataFrame.rename_axis

df1 = (df.set_index([df['Week'] % 100, df['Week'] // 100])['Sales']
         .unstack()
         .rename_axis(None, axis=1)
         .reset_index())
print (df1)

   Week  2019  2020
0     1   700   100
1     2   800   200
2     3   900   300
Run Code Online (Sandbox Code Playgroud)

编辑:您需要添加列名set_index

df1 = (df.set_index([df['Week'] % 100, 'Category', df['Week'] // 100])['Sales']
         .unstack()
         .rename_axis(None, axis=1)
         .reset_index())
print (df1)
   Week Category  2019  2020
0     1      Red   800   100
1     1    White   900   200
2     2      Red   100   300
3     2    White   200   700
Run Code Online (Sandbox Code Playgroud)