大熊猫梳理数据帧优化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大熊猫梳理数据帧优化相关的知识,希望对你有一定的参考价值。
嘿我在熊猫中有一个时间序列订单数据集,某些日期缺少值来纠正它我试图从之前的日期中获取值。
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到值map
现在,最慢的部分正在更新原始数据帧
我正在循环每个供应商并更新原始数据框中的值。
需要建议加快这个内循环
例:
|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:我可能不清楚这个问题,所以很乐意回答怀疑并重新编辑帖子。
您可以按天和supplier_id对数据进行分组,对于每个分组的数据帧,使用Null替换0,一旦使用前向填充填充空值,对于早期值,您可以使用向后填充,
它可能会减少你的时间
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.3
以上是关于大熊猫梳理数据帧优化的主要内容,如果未能解决你的问题,请参考以下文章