使用当前行值筛选 pandas 列,并对另一列求和以形成新列

Filter pandas column with current row values and sum another column to form a new column

我有以下数据集。

Date Area Value Delivery_Date
01-01-2021 ABC 10 02-01-2021
02-01-2021 BCD 20 04-01-2021
03-01-2021 ABC 15 04-01-2021
04-01-2021 BCD 25 05-01-2021
05-01-2021 ABC 15 06-01-2021

我必须创建一个名为 Sum 的新列,它遵循以下条件。

它应该获取当前行并且应该从具有相同区域和日期大于当前行日期和交货日期也大于当前行“日期”的其他行中查找值。它应该对满足这三个条件的行中的值求和。所以结果 table 看起来像

Date Area Value Delivery_Date Sum
01-01-2021 ABC 10 02-01-2021 40
02-01-2021 BCD 20 04-01-2021 45
03-01-2021 ABC 15 04-01-2021 30
04-01-2021 BCD 25 05-01-2021 25
05-01-2021 ABC 15 06-01-2021 15

我不知道如何开始。有人可以帮助我吗?

IIUC,在按日期(最近到古代)对数据进行排序后使用 GroupBy+expanding.sum

# ensure datetime (although this format could be also sorted as string)
df['Date'] = pd.to_datetime(df['Date'])

df['sum'] = (df
 .sort_values(by='Date', ascending=False)      # reverse values
 .groupby(['Area'])['Value'].expanding().sum() # sum recent values
 .droplevel(0)
)

输出:

        Date Area  Value   sum
0 2021-01-01  ABC     10  40.0
1 2021-02-01  BCD     20  45.0
2 2021-03-01  ABC     15  30.0
3 2021-04-01  BCD     25  25.0
4 2021-05-01  ABC     15  15.0