Группировка данных на основе месяца-года в pandas, а затем удаление всех записей, кроме последней - Python - PullRequest
1 голос
/ 26 мая 2020
 Below is my example dataframe
    Date       Indicator  Value
0   2000-01-30  A          30
1   2000-01-31  A          40
2   2000-03-30  C          50
3   2000-02-27  B          60
4   2000-02-28  B          70
5   2000-03-31  C          90
6   2000-03-28  C          100
7   2001-01-30  A          30
8   2001-01-31  A          40
9   2001-03-30  C          50
10  2001-02-27  B          60
11  2001-02-28  B          70
12   2001-03-31  C          90
13   2001-03-28  C          100


Desired Output
Date        Indicator Value
2000-01-31   A          40
2000-02-28   B          70
2000-03-31   C          90
2001-01-31   A          40
2001-02-28   B          70
2001-03-31   C          90

Я хочу написать код, который группирует данные по определенному месяцу-году, а затем сохраняет запись последней даты в этом конкретном месяце-году и отбрасывает остальные. Данные до 2020 года.

Мне удалось получить счет только по месяцам и годам. Я не могу отказаться от создания правильного кода, который помогает сгруппировать данные по месяцам, годам и показателям и получать правильные результаты

1 Ответ

2 голосов
/ 26 мая 2020

Используйте Series.dt.to_period для периодов месяцев, совокупный индекс максимальной даты по группам DataFrameGroupBy.idxmax, а затем перейдите к DataFrame.loc:

df['Date'] = pd.to_datetime(df['Date'])

print (df['Date'].dt.to_period('m'))
0     2000-01
1     2000-01
2     2000-03
3     2000-02
4     2000-02
5     2000-03
6     2000-03
7     2001-01
8     2001-01
9     2001-03
10    2001-02
11    2001-02
12    2001-03
13    2001-03
Name: Date, dtype: period[M]

df = df.loc[df.groupby(df['Date'].dt.to_period('m'))['Date'].idxmax()]
print (df)
         Date Indicator  Value
1  2000-01-31         A     40
4  2000-02-28         B     70
5  2000-03-31         C     90
8  2001-01-31         A     40
11 2001-02-28         B     70
12 2001-03-31         C     90
...