Python 如何基于多列中的多个条件计算/求和值

Python 如何基于多列中的多个条件计算/求和值,python,pandas,Python,Pandas,我有一个包含大约10万行和 我想计算一下,对于每一行,对于每一种材料,在过去的30天里运送了多少QTY。 正如您在下面的示例中所看到的,计算的数量取决于“材料、装运日期”。 我试图编写非常基本的代码,但找不到将其应用于所有行的方法 df[(df['malzeme']==material) & (df['cikistarihi'] < shippingDate) & (df['cikistarihi'] >= (shippingDate-30))]['qty'].sum

我有一个包含大约10万行和 我想计算一下,对于每一行,对于每一种材料,在过去的30天里运送了多少QTY。 正如您在下面的示例中所看到的,计算的数量取决于“材料、装运日期”。 我试图编写非常基本的代码,但找不到将其应用于所有行的方法

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'])
即可确保日期按时间顺序排列。