大熊猫梳理数据帧优化

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

以上是关于大熊猫梳理数据帧优化的主要内容,如果未能解决你的问题,请参考以下文章

提高处理大熊猫数据帧的性能

熊猫,无法连接数据帧

在熊猫中连接/附加许多数据帧

将大熊猫数据帧的每一列与同一数据帧的每一列相乘的最有效方法

从大熊猫数据帧由总和行以15个分钟垃圾箱数据帧的时间序列

熊猫:问题数据添加到数据帧大熊猫