嘿,我有一个时间序列顺序数据集在熊猫与一些日期的缺失值,以纠正它,我试图从以前的日期,可得的值。
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)为了解释代码,我正在遍历丢失的日期,然后获取丢失日期之前的值列表。然后,使用熊猫优先()获取供应商标识值地图。
现在最慢的部分是更新原始数据帧
我正在循环每个供应商并更新原始数据框架中的值。
需要建议来加快内部循环的速度
示例:
|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:我可能对这个问题不太清楚,所以很乐意回答疑问,重新编辑这篇文章。
发布于 2018-09-14 16:54:58
您可以按日和supplier_id对数据进行分组,对于每个分组数据,将0替换为Null,一旦使用前向填充获得空填充,则可以对早期的值使用反向填充,
它可能会减少你的时间
df.replace(0,np.nan,inplace=True)
df['values'] = df.groupby([df.supplier_id])['values'].apply(lambda x: x.replace(0,np.nan).fillna(method='ffill').fillna(method = 'bfill'))退出:
order_date sku_id supplier_id values
0 2017-12-01 1 10 1.0
1 2017-12-01 7 9 1.3
2 2017-12-01 2 3 1.4
3 2017-12-02 2 3 1.4
4 2017-12-02 7 9 1.3
5 2017-12-03 2 3 1.0
6 2017-12-03 1 10 1.0
7 2017-12-03 7 9 1.3https://stackoverflow.com/questions/52335455
复制相似问题