2

I have the following DataFrame:

from datetime import datetime
from pandas import DataFrame

df = DataFrame({
    'Buyer': ['Carl', 'Carl', 'Carl', 'Carl', 'Joe', 'Carl'],
    'Quantity': [18, 3, 5, 1, 9, 3],
    'Date': [
        datetime(2013, 9, 1, 13, 0),
        datetime(2013, 9, 1, 13, 5),
        datetime(2013, 10, 1, 20, 0),
        datetime(2013, 10, 3, 10, 0),
        datetime(2013, 12, 2, 12, 0),                                      
        datetime(2013, 9, 2, 14, 0),
    ]
})

First: I am looking to add another column to this DataFrame which sums up the purchases of the last 5 days for each buyer. In particular the result should look like this:

        Quantity
Buyer   Date    
Carl    2013-09-01  21
        2013-09-02  24
        2013-10-01  5
        2013-10-03  6
Joe     2013-12-02  9

To do so I started with the following:

df1 = (df.set_index(['Date', 'Buyer'])
         .unstack(level=[1])
         .resample('D', how='sum')
         .fillna(0))

However, I do not know how to add another column to this DataFrame which can add up for each row the previous 5 row entries.

Second: Add another column to this DataFrame which does not only sum up the purchases of the last 5 days like in (1) but also weights these purchases based on their dates. For example: those purchases from 5 days ago should be counted 20%, those from 4 days ago 40%, those from 3 days ago 60%, those from 2 days ago 80% and those from one day ago and from today 100%

4

0 回答 0