首页 > 解决方案 > 如何根据多列中的多个条件计算/求和值

问题描述

我有一个大约有一个运输记录表。100K 行,我想计算每行、每种材料在过去 30 天内运送了多少数量。正如您在下面的示例中看到的,计算的数量取决于“材料、发货日期”。我尝试编写非常基本的代码,但找不到将其应用于所有行的方法。

df[(df['malzeme']==material) & (df['cikistarihi'] < shippingDate) & (df['cikistarihi'] >= (shippingDate-30))]['qty'].sum()
材料 发货日期 数量 最近 30 天内发货的数量
一个 23.01.2019 8 0
一个 28.01.2019 41 8
一个 31.01.2019 66 49 (8+41)
一个 20.03.2019 67 0
17.02.2019 53 0
26.02.2019 35 53
11.03.2019 4 88 (53+35)
20.03.2019 67 106 (35+4+67)

标签: pythonpandas

解决方案


您可以.groupby使用.rolling

# convert the shippingData to datetime:
df["shippingDate"] = pd.to_datetime(df["shippingDate"], dayfirst=True)

# sort the values (if they aren't already)
df = df.sort_values(["material", "shippingDate"])

df["shipped qtys in last 30 days"] = (
    df.groupby("material")
    .rolling("30D", on="shippingDate", closed="left")["qty"]
    .sum()
    .fillna(0)
    .values
)
print(df)

印刷:

  material shippingDate  qty  shipped qtys in last 30 days
0        A   2019-01-23    8                           0.0
1        A   2019-01-28   41                           8.0
2        A   2019-01-31   66                          49.0
3        A   2019-03-20   67                           0.0
4        B   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

编辑:.sort_values()在 groupby 之前添加


推荐阅读