【发布时间】:2018-09-15 01:07:06
【问题描述】:
嘿,我在 pandas 中有一个时间序列顺序数据集,其中某些日期缺少值来纠正它我正在尝试从以前可用的日期中获取值。
for date in dates_missing:
df_temp = df[df.order_date<date].sort_values(['order_date'],ascending=False)
supplier_map = df_temp.groupby('supplier_id')['value'].first()
for supplier_id in supplier_map.index.values:
df[(df.order_datetime==date)&(df.su_id == supp)]['value'] = supplier_map.get(supplier_id)
为了解释代码,我将遍历丢失的日期,然后获取丢失日期之前的值列表。 然后使用 pandas first() 获取供应商 ID 到值映射
现在最慢的部分是更新回原始数据帧
我正在遍历每个供应商并更新原始数据框中的值。
需要建议来加快这个内部 for 循环
例子:
|order_date|supplier_id |value |sku_id|
|2017-12-01| 10 | 1.0 | 1 |
|2017-12-01| 9 | 1.3 | 7 |
|2017-12-01| 3 | 1.4 | 2 |
|2017-12-02| 3 | 0 | 2 |
|2017-12-02| 9 | 0 | 7 |
|2017-12-03| 3 | 1.0 | 2 |
|2017-12-03| 10 | 1.0 | 1 |
|2017-12-03| 9 | 1.3 | 7 |
修复日期 2017-12-02
|2017-12-02| 3 | 0 | 2 |
|2017-12-02| 9 | 0 | 7 |
修正数据框
|order_date|supplier_id |value |sku_id|
|2017-12-01| 10 | 1.0 | 1 |
|2017-12-01| 9 | 1.3 | 7 |
|2017-12-01| 3 | 1.4 | 2 |
|2017-12-02| 3 | 1.4 | 2 |
|2017-12-02| 9 | 1.3 | 7 |
|2017-12-03| 3 | 1.0 | 2 |
|2017-12-03| 10 | 1.0 | 1 |
|2017-12-03| 9 | 1.3 | 7 |
PS:
我可能对这个问题不太清楚,所以很乐意回答疑问并重新编辑帖子继续前进。
【问题讨论】:
-
您的日期是否连续丢失或与该日期相关的某些值丢失,您能澄清一下吗?
-
您能否提供minimal reproducible example 一些示例数据和您的预期输出?如果不了解缺失数据的实际表示方式,很难提供真正的答案。
-
为什么不使用 pd.interpolate ?
-
@NagaKiran 数据是行,但某些日期的值为零
-
@AnnaIliukovich-Strakovskaia我猜缺少示例让混淆提供一个清晰的上下文
标签: python pandas dataframe optimization