как игнорировать значения nan и вычислять среднее значение за последние 3 месяца - PullRequest
0 голосов
/ 14 декабря 2018

Я загрузил данные за 6 месяцев июль - декабрь

Это данные моего словаря

print(UPI_TransferIn)

вывод:

[{'UPI TransferIn amt': 3000.0, 'date': '11-10-2018', 'No of UPI Transaction': 1}, {'UPI TransferIn amt': 560.0, 'date': '25-09-2018', 'No of UPI Transaction': 1}, {'UPI TransferIn amt': 3000.0, 'date': '14-09-2018', 'No of UPI Transaction': 1}, {'UPI TransferIn amt': 6984.0, 'date': '09-07-2018', 'No of UPI Transaction': 1}]

Мой код

    Avg_per_month = df.groupby(pd.Grouper(key='date', freq='1M')).mean()                                                             
    Avg_of_3_Month = df.groupby(pd.Grouper(key='date', freq='1M')).mean().last("3M")
    total_Avg_of_3_Months = Avg_of_3_Month['UPI TransferIn amt'].mean()              

    print("\nAverage UPI Transaction-In per month :\n ", Avg_per_month)                            
    print("Total Average UPI Transaction-In in last 3 months : ", total_Avg_of_3_Months)    

Результат, который я получил:

--------------

Average UPI Transaction-In per month :
          No of UPI Transaction  UPI TransferIn amt
Date                                             
Jul-18                      1              6984.0
Aug-18                      0                 NaN
Sep-18                      2              1780.0
Oct-18                      1              3000.0
--------------
Total Average UPI Transaction-In in last 3 months :  2390.0
--------------

Я хочу, чтобы среднее значение вычислялось между июлем, сентябрем, октябрем в настоящее время. Оно рассчитано для сентября и октября.даже когда я написал last("3M").

Ожидаемый результат:

--------------
Total Average UPI Transaction-In in last 3 months :  3921.33333
--------------

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Ответ Джезраэль велик.Если вы хотите сделать это в течение нескольких периодов в обратном направлении, вы можете сделать это, рассчитав скользящее среднее:

your_data = [{'UPI TransferIn amt': 3000.0, 'date': '11-10-2018', 'No of UPI Transaction': 1}, {'UPI TransferIn amt': 560.0, 'date': '25-09-2018', 'No of UPI Transaction': 1}, {'UPI TransferIn amt': 3000.0, 'date': '14-09-2018', 'No of UPI Transaction': 1}, {'UPI TransferIn amt': 6984.0, 'date': '09-07-2018', 'No of UPI Transaction': 1}]
df = pd.DataFrame(your_data)

df['period'] = pd.to_datetime(df['date'], dayfirst=True).dt.to_period('M')
group = df.groupby('period')['UPI TransferIn amt'].mean()
average_3months = group.rolling(window=3, center=False).mean()
0 голосов
/ 14 декабря 2018

Используйте dropna для удаления NaN s строк и получите последние 3 на tail:

Avg_of_3_Month = (df.groupby(pd.Grouper(key='date', freq='1M'))
                    .mean()
                    .dropna(subset=['UPI TransferIn amt'])
                    .tail(3))

total_Avg_of_3_Months = Avg_of_3_Month['UPI TransferIn amt'].mean()              
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...