我有一个交易销售数据框:
print(df)
dt_op quantity cod_id
20/01/18 1 100
20/01/18 8 102
21/01/18 1 100
21/01/18 10 102
...
我想为产品中的每个不同商品定义一个新变量“ 速度”作为“累计销售量/ 天数 _since_the_launch_of_ _product “ cod_id”。
我尝试过:
start = min(df["dt_op"])
df["running_days"] = (df["dt_op"] - start).astype('timedelta64[D]')
df["csum"] = df.quantity.cumsum()
df["speed"] = df["csum"] / df["running_days"]
但是它不会为每个项目计算;我会避免for循环来解决计算问题和运行时间缓慢。
答案 0 :(得分:0)
尝试使用grouby在新列中保存每个“ cod_id”的首次启动日期:
df2 = df.groupby(['cod_id']).dt_op.min()
并将其合并回您的数据框
df = pd.merge(df, df2, on='cod_id', how='left')
然后创建一个新列,作为最短日期和第一个日期之间的数据差。您可以像上面一样计算csum并通过日期差进行计算。