Python 如何基于多列中的多个条件计算/求和值
我有一个包含大约10万行和 我想计算一下,对于每一行,对于每一种材料,在过去的30天里运送了多少QTY。 正如您在下面的示例中所看到的,计算的数量取决于“材料、装运日期”。 我试图编写非常基本的代码,但找不到将其应用于所有行的方法Python 如何基于多列中的多个条件计算/求和值,python,pandas,Python,Pandas,我有一个包含大约10万行和 我想计算一下,对于每一行,对于每一种材料,在过去的30天里运送了多少QTY。 正如您在下面的示例中所看到的,计算的数量取决于“材料、装运日期”。 我试图编写非常基本的代码,但找不到将其应用于所有行的方法 df[(df['malzeme']==material) & (df['cikistarihi'] < shippingDate) & (df['cikistarihi'] >= (shippingDate-30))]['qty'].sum
df[(df['malzeme']==material) & (df['cikistarihi'] < shippingDate) & (df['cikistarihi'] >= (shippingDate-30))]['qty'].sum()
df[(df['malzeme']==材料)和(df['cikistarihi']=(shippingDate-30))['qty'].sum()
材料
装运日期
数量
过去30天内装运的QTY
A.
23.01.2019
8.
0
A.
28.01.2019
41
8.
A.
31.01.2019
66
49 (8+41)
A.
20.03.2019
67
0
B
17.02.2019
53
0
B
26.02.2019
35
53
B
11.03.2019
4.
88 (53+35)
B
20.03.2019
67
106 (35+4+67)
您可以将
.groupby
与.rolling
一起使用:
#将发货数据转换为日期时间:
df[“shippingDate”]=pd.to_datetime(df[“shippingDate”],dayfirst=True)
#对值进行排序(如果尚未排序)
df=df.sort_值([“物料”、“发货日期”])
df[“过去30天内发货数量”]=(
df.分组依据(“材料”)
.滚动(“30D”,on=“shippingDate”,closed=“left”)[“数量”]
.sum()
.fillna(0)
价值观
)
打印(df)
印刷品:
材料发货日期最近30天发货数量
0A 2019-01-23 80.0
1A 2019-01-28 41 8.0
2A 2019-01-31 66 49.0
3 A 2019-03-20 67 0.0
4b 2019-02-17 53 0.0
5 B 2019-02-26 35 53.0
6 B 2019-03-11 4 88.0
7 B 2019-03-20 67 39.0
编辑:在groupby之前添加
.sort_values()
谢谢您的快速回复,但我想我遗漏了一些东西。当我更改日期和顺序时,出现了一些问题。数据={'material':['A','A','A','A','B','B','B','shippingDate':['2019-01-23','2019-01-28','2019-01-31','2019-01-20','2019-01-23','2019-03-28','2019-03-11','2019-03-20'],'qty':[8,41,66,67,53,35,4,67]}打印如下:材料发货日期发货数量30D 1 A 2019-01-28 41 182.0 3 A 2019-01-20 67 115.0 5 B 2019-03-28 35 0.0 7 B 2019-03-20 67 39。0@CanerU我认为逻辑是完全正确的。您只需在主逻辑之前执行df=df.sort_值(['material','shippingDate'])
即可确保日期按时间顺序排列。