【发布时间】:2021-04-01 07:47:47
【问题描述】:
我希望构建一个函数,该函数按天为以下 DataFrames 创建滚动总计,其中日期上每个代码的 In 从日期上每个代码的 Out 中减去,这个小计是减去的来自前几天的总数,但总数必须 >=0(我在下面的 Desired Output 中包含了一个示例。
下面是我的输入示例和我正在使用的函数以及我想要的输出示例。
df1 - 在
s = """ Date Code Quantity
0 10/01/2019 A 20
3 11/01/2019 A 2
7 12/01/2019 A 4
11 13/01/2019 A 10
"""
df2 - 输出
s =''' Date Code Quantity
0 11/01/2019 A 5
3 12/01/2019 A 100
4 15/01/2019 A 1
6 16/01/2019 A 2
'''
代码
df3 = df1.merge(df2, how='outer', left_on=['date', 'code'], right_on=['date', 'code']).fillna(0)
df3['qty1'] = df3['qty_x'] - df3['qty_y']
df3['qty'] = 0
def final_adder(x):
x.qty_x = x.qty_x
print(x)
return x
df_final = df3.groupby(['code']).apply(final_adder)
df_final['qty'] = df_final['qty'].clip(lower=0)
df_final.drop(['qty_x', 'qty_y','qty1'], inplace=True, axis=1)
date code qty_x qty_y qty1 qty
0 10/01/2019 A 20.0 0.0 20.0 0
3 11/01/2019 A 2.0 5.0 -3.0 0
7 12/01/2019 A 4.0 100.0 -96.0 0
11 13/01/2019 A 10.0 0.0 10.0 0
期望的输出
s = """ Date Code Quantity
0 10/01/2019 A 20
3 11/01/2019 A 17
7 12/01/2019 A 0
11 13/01/2019 A 10
12 14/01/2019 A 10
15 15/01/2019 A 9
16 16/01/2019 A 7
"""
【问题讨论】:
-
最简单的是合并后的for循环。
标签: python pandas function lambda