使用当前行值筛选 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
我有以下数据集。
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