[英]Unexpected results from Pandas.DataFrame.resample
我具有如下示例所示的2017年1月數據結構。
Date ProductID ProductType Qty
1.1.2017 1000 101 7
1.1.2017 1001 111 2
1.1.2017 1000 101 1
1.1.2017 1004 107 12
2.1.2017 1000 101 6
2.1.2017 1001 111 5
2.1.2017 1001 111 4
…..
31.1.2017 1000 101 7
31.1.2017 1001 111 5
31.1.2017 1001 111 7
我想計算產品類型為101和111的每個產品ID的每周銷售額,以使我的結果如下所示
ProductID| WeeklyDates| Sales
1000 | 1.1.2017 | 14
| 1.8.2017 | NaN
| 1.15.2017 | NaN
| 1.22.2017 | NaN
| 1.29.2017 | 7
-----------------------------------
1001 | 1.1.2017 | 11
| 1.8.2017 | NaN
| 1.15.2017 | NaN
| 1.22.2017 | NaN
| 1.29.2017 | 12
在此,NaN表示示例中沒有這些日期的數據。 現在要獲得這些結果,我正在使用以下代碼
import pandas as pd
df = pd.read_csv('data.csv', encoding = 'latin-1', sep=',')
df['Date'] = pd.to_datetime(df['Date'])
transaction_types = [101, 111]
s_df = df[df['ProductType'].isin(transaction_types)]
res_df = s_df.filter(['Date','ProductID','Qty']) # filter it because I do not want other product type column now
res_df = res_df.set_index('Date').groupby('ProductID').resample('W').sum()
res_df.to_csv('result.csv', sep=';', encoding='latin-1')
它給我帶來了一些奇怪的結果。 我得到的日期甚至是數據中沒有的。 我只顯示一個ID的結果
ProductID| Date |ProductID| Qty
1000 | 01/01/2017 | 4000 | 41
1000 | 08/01/2017 | |
1000 | 15/01/2017 | 33000 | 54
1000 | 22/01/2017 | 87000 | 313
1000 | 29/01/2017 | 79000 | 94
1000 | 05/02/2017 | 36000 | 413
1000 | 12/02/2017 | |
1000 | 19/02/2017 | |
1000 | 26/02/2017 | |
1000 | 05/03/2017 | 8000 | 78
結果為原始結果,與上面的示例不符。 但是productID即將出現2次了,我認為它也對productID求和。 而且總和是不正確的。 日期也要到三月為止,在我的數據集中,日期只有一月。 有人可以指導我代碼中可能出現問題的地方嗎? 謝謝
我沒有給出任何日期格式,例如
df['Date'] = pd.to_datetime(df['Date']) # Not correct
df['Date'] = pd.to_datetime(df['Date'], format='%d.%m.%Y') # Correct way
因此,因此將幾個月視為幾天,反之亦然,這就是我得到錯誤結果的原因。
我陷入了同樣的問題,並遇到了這個答案。 瀏覽完熊貓文檔后,我了解到一種更靈活的解決方法,就是允許熊貓推斷出“ datetime”格式,如下所示: df['Date'] = pd.to_datetime(df['Date'], infer_datetime_format=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.