[英]pandas combing dataframes optimisation
嘿,我在熊貓中有一個時間序列訂單數據集,其中某些日期缺少值來更正它,我正嘗試從以前的可用日期中獲取值。
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)
為了解釋代碼,我循環遍歷了缺失的日期,然后獲取了缺失日期之前的值列表。 然后使用熊貓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:我可能對這個問題不太清楚,所以很樂意回答疑問並重新編輯繼續的帖子。
您可以按天和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.3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.