#Pandas,根据另一列的标题名称(列名称)添加到列的值

时间:2020-05-14 22:59:28

标签: python pandas sum pivot pandas-groupby

我有一个广泛的时间序列日期框架,其中日期作为标题,一列中包含日期。我一直在尝试根据WIP列中的日期,将QTYs列添加到标题中的匹配日期和前两个列中,
。您的反馈或有关如何实现此目标的建议将得到
的赞赏。

我尝试使用日期作为列从QTY和WIP创建数据透视表,然后
按页眉分组,但没有成功。

日期框架

    dict = {'SKU':['a1','a2', 'a3', 'b1', 'b2', 'b3'],
       '4/12/2020':[-5,-18,-25,7,20,0],
       '4/19/2020':[-10,0,-20,15,10,-5],
       '4/26/2020':[-15,25,-28,20,30,2],
       '5/03/2020':[2,-5,-30,-5,40,5],
       'WIP':['4/12/2020','4/19/2020','4/26/2020','5/03/2020','5/03/2020','4/19/2020'],
       'QTY':[10,0,20,100,5,40]}
    df = pd.DataFrame(dict)
    df

数据

SKU 4/12/2020   4/19/2020   4/26/2020   5/03/2020   WIP        QTY
a1     -5          -10        -15          2      4/12/2020    10
a2    -18            0         25         -5      4/19/2020     0
a3    -25          -20        -28        -30      4/26/2020     20
b1      7           15         20         -5      5/03/2020    100
b2     20           10         30         40      5/03/2020     5
b3      0           -5          2          5      4/19/2020     40

期望输出

SKU 4/12/2020   4/19/2020   4/26/2020   5/03/2020   WIP        QTY
a1      5          -10        -15          2      4/12/2020    10
a2    -18            0         25         -5      4/19/2020     0
a3     -5            0         -8        -30      4/26/2020     20
b1      7          115        120         95      5/03/2020    100
b2     20           15         35         45      5/03/2020     5
b3     40           35          2          5      4/19/2020     40

例如,

SKU  4/12/2020  4/19/2020   4/26/2020   5/03/2020     WIP          QTY
a3    -25+20     -20+20       -28+20      -30        4/26/2020      20
b1      7        15+100      20+100      -5+100      5/03/2020     100
b3     0+40      -5+40          2          5         4/19/2020      40

1 个答案:

答案 0 :(得分:0)

尝试一下,似乎得到正确的输出。

import pandas as pd

dict = {'SKU':['a1','a2', 'a3', 'b1', 'b2', 'b3'],
    '4/12/2020':[-5,-18,-25,7,20,0],
    '4/19/2020':[-10,0,-20,15,10,-5],
    '4/26/2020':[-15,25,-28,20,30,2],
    '5/03/2020':[2,-5,-30,-5,40,5],
    'WIP':['4/12/2020','4/19/2020','4/26/2020','5/03/2020','5/03/2020','4/19/2020'],
    'QTY':[10,0,20,100,5,40]}
df = pd.DataFrame(dict)
print(df)

for i, row in df.iterrows():
  for col in df.columns[1:-2]:
    if pd.Timestamp(row['WIP']) >= pd.Timestamp(col):
      df.at[i, col] += row['QTY']

print(df)
相关问题