Я пытаюсь использовать панд, чтобы получить максимальное значение даты (вместе с датой) за период, а затем все данные за следующий период.
Вот некоторые примеры данных:
import pandas as pd
df = pd.DataFrame([
['1','1','20190101',50],
['1','1','20190104',60],
['1','1','20190121',70],
['1','2','20190103',50],
['1','2','20190109',90],
['1','3','20190106',40],
['1','3','20190109',20],
['1','3','20190122',70],
['2','1','20190102',10],
['2','2','20190103',30],
['2','2','20190109',50]
], columns = ['part1', 'part2', 'date_text', 'cost'])
print(df)
| | part1 | part2 | date_text | cost |
|----|-------|-------|-----------|------|
| 0 | 1 | 1 | 20190101 | 50 |
| 1 | 1 | 1 | 20190104 | 60 |
| 2 | 1 | 1 | 20190121 | 70 |
| 3 | 1 | 2 | 20190103 | 50 |
| 4 | 1 | 2 | 20190109 | 90 |
| 5 | 1 | 3 | 20190106 | 40 |
| 6 | 1 | 3 | 20190109 | 20 |
| 7 | 1 | 3 | 20190122 | 70 |
| 8 | 2 | 1 | 20190102 | 10 |
| 9 | 2 | 2 | 20190103 | 30 |
| 10 | 2 | 2 | 20190109 | 50 |
Так что я собираюсь сделать это, используя это как 1-ю часть:
df2 = df[df['date_text']<='20190120'].sort_values('date_text').groupby(['part1', 'part2']).last()
print(df2)
| | | date_text | cost |
|-------|--------|------------|------|
| part1 | part2 | | |
| 1 | 1 | 20190104 | 60 |
| | 2 | 20190109 | 90 |
| | 3 | 20190109 | 20 |
| 2 | 1 | 20190102 | 10 |
| | 2 | 20190109 | 50 |
Затем это как 2-ю часть:
df3 = df[df['date_text']>'20190120']
print(df3)
| | part1 | part2 | date_text | cost |
|---|-------|-------|-----------|------|
| 2 | 1 | 1 | 20190121 | 70 |
| 7 | 1 | 3 | 20190122 | 70 |
Если я попытаюсь добавитьих вместе получается правильный беспорядок.Я уверен, что это, вероятно, связано с тем, как выводится группа по битам, но я не уверен, как преобразовать ее в формат, в котором он выглядит как обычный фрейм данных.
ЭтоРезультат:
df4 = df2.append(df3)
print(df4)
| | cost | date_text | part1 | part2 |
|--------|------|-----------|-------|-------|
| (1, 1) | 60 | 20190104 | NaN | NaN |
| (1, 2) | 90 | 20190109 | NaN | NaN |
| (1, 3) | 20 | 20190109 | NaN | NaN |
| (2, 1) | 10 | 20190102 | NaN | NaN |
| (2, 2) | 50 | 20190109 | NaN | NaN |
| 2 | 70 | 20190121 | 1 | 1 |
| 7 | 70 | 20190122 | 1 | 3 |
Любая помощь будет высоко ценится.