Python Pandas Фрейм данных: значение второго последнего дня для каждого человека - PullRequest
1 голос
/ 26 февраля 2020

Я пытаюсь сгруппировать один условный кадр данных в другой, используя Pythons pandas dataframes:

В первом кадре данных указаны праздники каждого человека:

import pandas as pd
df_holiday = pd.DataFrame({'Person': ['Alfred', 'Bob', 'Charles'], 'Last Holiday': ['2018-02-01', '2018-06-01', '2018-05-01']})
df_holiday.head()
    Last Holiday    Person
0   2018-02-01  Alfred
1   2018-06-01  Bob
2   2018-05-01  Charles

Второй фрейм данных показывает стоимость продаж для каждого человека и месяца:

df_sales = pd.DataFrame({'Person': ['Alfred', 'Alfred', 'Alfred','Bob','Bob','Bob','Bob','Bob','Bob','Charles','Charles','Charles','Charles','Charles','Charles'],'Date': ['2018-01-01', '2018-02-01', '2018-03-01', '2018-01-01', '2018-02-01', '2018-03-01','2018-04-01', '2018-05-01', '2018-06-01', '2018-01-01', '2018-02-01', '2018-03-01','2018-04-01', '2018-05-01', '2018-06-01'], 'Sales': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]})
df_sales.head(15)
    Date    Person  Sales
0   2018-01-01  Alfred  1
1   2018-02-01  Alfred  2
2   2018-03-01  Alfred  3
3   2018-01-01  Bob 4
4   2018-02-01  Bob 5
5   2018-03-01  Bob 6
6   2018-04-01  Bob 7
7   2018-05-01  Bob 8
8   2018-06-01  Bob 9
9   2018-01-01  Charles 10
10  2018-02-01  Charles 11
11  2018-03-01  Charles 12
12  2018-04-01  Charles 13
13  2018-05-01  Charles 14
14  2018-06-01  Charles 15

Теперь я хочу узнать номер продаж для каждого человека перед его последним праздником, то есть результат должен быть:

    Date    Person  Sales
0   2018-01-01  Alfred  1
7   2018-05-01  Bob 8
12  2018-04-01  Charles 13

Любая помощь?

1 Ответ

2 голосов
/ 26 февраля 2020

Мы могли бы сделать merge, затем filter и drop_duplicates

df=df_holiday.merge(df_sales).loc[lambda x : x['Last Holiday']>x['Date']].drop_duplicates('Person',keep='last')
Out[163]: 
     Person Last Holiday        Date  Sales
0    Alfred   2018-02-01  2018-01-01      1
7       Bob   2018-06-01  2018-05-01      8
12  Charles   2018-05-01  2018-04-01     13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...