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

2024-04-29 04:12:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个以日期为标题的宽时间序列日期框和一个日期列。我一直在尝试将QTYs列添加到标题中的匹配日期中,并根据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

Tags: a2标题dfa1时间序列b2dict
1条回答
网友
1楼 · 发布于 2024-04-29 04:12:25

试试这个,似乎可以得到正确的输出

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)

相关问题 更多 >