簡體   English   中英

Pandas.DataFrame.resample的意外結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM