簡體   English   中英

正確使用 groupby 重采樣聚合 function

[英]Right way to use groupby resample aggregate function

我有一些數據,我試圖先按“名稱”分組,然后按“transaction_date”重新采樣

transaction_date    name    revenue
01/01/2020          ADIB    30419
01/01/2020          ADIB    1119372
01/01/2020          ADIB    1272170
01/01/2020          ADIB    43822
01/01/2020          ADIB    24199

我遇到的問題是以兩種不同的方式編寫 groupby resample 返回兩個不同的結果

1-- df.groupby("name").resample("M", on="transaction_date").sum()[['revenue']].head(12)

2-- df.groupby("name").resample("M", on="transaction_date").aggregate({'revenue':'sum'}).head(12)

第一種方法返回我正在尋找的值。

我不明白為什么這兩種方法返回不同的結果。 這是一個錯誤嗎?

Result 1
name    transaction_date    revenue 
ADIB    2020-01-31          39170943.0
        2020-02-29          48003966.0
        2020-03-31          32691641.0
        2020-04-30          11979337.0
        2020-05-31          35510726.0
        2020-06-30          25677857.0
        2020-07-31          12437122.0
        2020-08-31          4348936.0
        2020-09-30          10547188.0
        2020-10-31          5287406.0
        2020-11-30          4288930.0
        2020-12-31          17066105.0

Result 2
name    transaction_date    revenue
ADIB    2020-01-31          64128331.0
        2020-02-29          54450014.0
        2020-03-31          45636192.0
        2020-04-30          25016777.0
        2020-05-31          11941744.0
        2020-06-30          15703151.0
        2020-07-31          5517526.0
        2020-08-31          4092618.0
        2020-09-30          4333433.0
        2020-10-31          3944117.0
        2020-11-30          6528058.0
        2020-12-31          5718196.0

事實上,這要么是一個錯誤,要么是一種極其奇怪的行為。 考慮以下數據:

input: 

        date   revenue name
0 2020-10-27  0.744045  n_1
1 2020-10-29  0.074852  n_1
2 2020-11-21  0.560182  n_2
3 2020-12-29  0.208616  n_2
4 2020-05-03  0.325044  n_0

gb = df.groupby("name").resample("M", on="date")

gb.aggregate({'revenue':'sum'})

==>
              revenue
name date                
n_0  2020-12-31  0.325044
n_1  2020-05-31  0.744045
     2020-06-30  0.000000
     2020-07-31  0.000000
     2020-08-31  0.000000
     2020-09-30  0.000000
     2020-10-31  0.074852
n_2  2020-10-31  0.560182
     2020-11-30  0.208616


print(gb.sum()[['revenue']])
==>
                  revenue
name date                
n_0  2020-05-31  0.325044
n_1  2020-10-31  0.818897
n_2  2020-11-30  0.560182
     2020-12-31  0.208616

可以看出,聚合似乎產生了錯誤的結果。 例如,它從 Oct 獲取數據並將其附加到 May。

這是一個更簡單的例子:

數據框:

        date  revenue name
0 2020-02-24        9  n_1
1 2020-05-12        8  n_2
2 2020-03-28        9  n_2
3 2020-01-14        2  n_0

gb = df.groupby("name").resample("M", on="date")

res1 = gb.sum()[['revenue']]

==>
name date               
n_0  2020-01-31        2
n_1  2020-02-29        9
n_2  2020-03-31        9
     2020-04-30        0
     2020-05-31        8

res2 = gb.aggregate({'revenue':'sum'})

==>
name date               
n_0  2020-05-31        2
n_1  2020-01-31        9
n_2  2020-02-29        8
     2020-03-31        9

我打開了一個關於它的錯誤: https://github.com/pandas-dev/pandas/issues/35173

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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