python - 在 pandas 中使用每周聚合过滤器
问题描述
所以我在熊猫每周跟踪蔬菜的美元销售额有下表
datetime | vegetable | sales (amount sold)
2020-01-06. carrot. 100
2020-01-13. carrot. 200
2020-01-20. carrot. 450
.
.
.
2020-03-23. carrot. 250
2020-01-06. onion. 40
2020-01-13. onion. 80
2020-01-20. onion. 10
.
.
.
2020-04-27. onion. 60
2020-01-06. lettuce 40
2020-01-13. lettuce 0
2020-01-20. lettuce. 0
2020-01-28. lettuce. 0
.
.
.
2020-03-16. lettuce 50
是否可以按蔬菜分组并在一个月(4 周)的时间窗口内过滤掉特定蔬菜在 1-2 周内售出 0 次的蔬菜。例如,生菜在 1 月份的 4 周中有 3 周没有售出,因此不应该进入决赛桌。我是否需要一个额外的列指示器月数或周数(或两者)用于过滤器,或者是否可以通过遍历蔬菜组中的 ds 并一次执行 4 个日期戳?
解决方案
尝试这个:
import pandas as pd
df = pd.DataFrame(
data=[
['2020-01-06', 'carrot', 100],
['2020-01-13', 'carrot', 200],
['2020-01-20', 'carrot', 450],
['2020-03-23', 'carrot', 250],
['2020-01-06', 'onion', 40],
['2020-01-13', 'onion', 80],
['2020-01-20', 'onion', 10],
['2020-04-27', 'onion', 60],
['2020-01-06', 'lettuce', 40],
['2020-01-13', 'lettuce', 0],
['2020-01-20', 'lettuce', 0],
['2020-01-28', 'lettuce', 0],
['2020-03-16', 'lettuce', 50, ]],
columns=['datetime', 'vegetable', 'sales']
)
df['datetime'] = pd.to_datetime(df.datetime)
df['datetime_month'] = df.datetime.map(lambda x: x.strftime('%Y-%m'))
df['has_sales'] = df.sales.apply(lambda x: 1 if x > 0 else 0)
month_df = df.groupby(
['datetime_month', 'vegetable']
).agg(n_weeks_w_sales=('has_sales', 'sum')).reset_index()
month_df = month_df[month_df.n_weeks_w_sales > 2]
df.merge(
right=month_df,
on=['datetime_month', 'vegetable'],
how='inner'
).drop(columns=['has_sales', 'n_weeks_w_sales', 'datetime_month'])
推荐阅读
- wordpress - 努力在 Chrome Inspect 中查找元素 - 如何自定义?
- angular - 如何以角度5从URL(使用blob)下载图像
- node.js - node.js 中的“EIO:i/o 错误,写入”是什么,如何消除它?
- c++ - 该程序允许用户处理循环,只要用户输入一个奇数
- flutter - 将 TextField 下划线颜色更改为渐变
- python-3.x - Matplotlib:使用跟踪保存的动画
- python - TensorFlow 和 keras 得到相同的输出预测误差
- typescript - 如何在 TS 中实现接口并返回特定类型?
- python - 将DataFrame的每一列转换为字典,并根据列名命名字典
- xpages - 莲花笔记客户端中的客户端javascript不起作用