पंडों में 30 दिनों का रोल करना

Dec 08 2020

मेरे पास एक डेटासेट है:

import pandas as pd 

df = pd.DataFrame({
        'ID':  ['27459', '27459', '27459', '27459', '27459', '27459', '27459', '48002', '48002', '48002'],
        'Invoice_Date': ['2020-06-26', '2020-06-29', '2020-06-30', '2020-07-14', '2020-07-25', 
                         '2020-07-30', '2020-08-02', '2020-05-13', '2020-06-20', '2020-06-28'],
        'Difference_Date': [0,3,1,14,11,5,3,0,38,8],
        })
df

मुझे एक और कॉलम जोड़ने की आवश्यकता है जो 30 दिनों की अवधि को रोल करने का औसत है। मैंने उपयोग करने की कोशिश की rollingलेकिन यह मुझे त्रुटि देता है window must be an integer। चूंकि यह ग्राहक-आधारित डेटा है, इसलिए इसे समूहबद्ध भी IDकिया जाना चाहिए ।

मेरा अपेक्षित आउटपुट है:

    ID      Invoice_Date    Difference_Date   Average
0   27459   2020-06-26      0                 0.00
1   27459   2020-06-29      3                 1.50
2   27459   2020-06-30      1                 1.33
3   27459   2020-07-14      14                4.50
4   27459   2020-07-25      11                5.80
5   27459   2020-07-30      5                 10.00
6   27459   2020-08-02      3                 8.25
7   48002   2020-05-13      0                 0.00
8   48002   2020-06-20      38                38.00
9   48002   2020-06-28      8                 23.00

30 दिनों के रोलिंग के औसत की गणना के लिए क्या कोई कारगर उपाय है?

जवाब

2 ZLi Dec 08 2020 at 21:32

इसका कारण यह है कि पांडा को एक डेटाइमइंडेक्स की आवश्यकता है df.rolling('30D'):

import pandas as pd 

df = pd.DataFrame({
        'ID':  ['27459', '27459', '27459', '27459', '27459', '27459', '27459', '48002', '48002', '48002'],
        'Invoice_Date': ['2020-06-26', '2020-06-29', '2020-06-30', '2020-07-14', '2020-07-25', 
                         '2020-07-30', '2020-08-02', '2020-05-13', '2020-06-20', '2020-06-28'],
        'Difference_Date': [0,3,1,14,11,5,3,0,38,8],
        })
df.index = pd.DatetimeIndex(df['Invoice_Date'])
df = df.sort_index()
df.rolling('30D')