Python Pandas groupby со столбцом даты с другими значениями, затем возвращает фрейм данных со столбцом даты, заполненным самой последней датой - PullRequest
1 голос
/ 17 апреля 2020

Итак, у меня есть такие данные: The Data

Я хочу сгруппировать их и суммировать значения месяца 0 - месяца 3, я могу добиться этого с помощью pandas groupby . Проблема в том, что столбец Дата окончания имеет разные значения, и я хочу взять в столбце дату последний . Для этого примера означает, что я хочу, чтобы столбец Дата окончания имел значение 2020-09-25. Как показано ниже: Desired output

Как мне сделать это с pandas groupby? Для вашего удобства ниже приведены переменные для имен столбцов:

details_columns = [ "Person Name", "Bill rate", "Project ERP","Status", "Assignment", "Engagement Code", "End date"]
sum_columns = ["Month 0", "Month 1", "Month 2", "Month 3"]

Мне нужно, чтобы возвращаемое значение было DataFrame , надеясь, что кто-нибудь может помочь. Спасибо!

Текстовые данные:

Person Name Bill rate Project ERP Status Assignment Engagement Code End date Current Month U% Month 1 U% Month 2 U% Month 3 U%
John Doe 3500000 0.58 Chargeable - Standard Project A 21572323 2020-08-22 0 0.5 0.3 0.2
John Doe 3500000 0.58 Chargeable - Standard Project A 21572323 2020-05-22 0.4 0.25 0 0
John Doe 3500000 0.45 Chargeable - Standard Project B 21579528 2020-09-25 0 0.7 0.7 0.7
John Doe 3500000 0.45 Chargeable - Standard Project B 21579528 2020-05-22 0.2 0.12 0 0
John Doe 3500000 0.45 Chargeable - Standard Project B 21579528 2020-04-03 0.1 0 0 0

1 Ответ

0 голосов
/ 17 апреля 2020

Создать словарь d для столбцов суммы и максимальное значение для столбца End date, а затем агрегировать по GroupBy.agg, добавляется последний DataFrame.reindex для того же порядка столбцов как оригинал DataFrame:

cols = ["Person Name", "Bill rate", "Project ERP","Status", "Assignment","Engagement Code"]
sum_columns = ["Current Month U%", "Month 1 U%", "Month 2 U%","Month 3 U%"]

d = dict.fromkeys(sum_columns, 'sum')
d["End date"] = 'max'

df1 = df.groupby(cols, as_index=False).agg(d).reindex(df.columns, axis=1)
print (df1)
  Person Name  Bill rate  Project ERP       Status          Assignment  \
0    John Doe    3500000         0.45  Chargeable   Standard Project B   
1    John Doe    3500000         0.58  Chargeable   Standard Project A   

   Engagement Code    End date  Current Month U%  Month 1 U%  Month 2 U%  \
0         21579528  2020-09-25               0.3        0.82         0.7   
1         21572323  2020-08-22               0.4        0.75         0.3   

   Month 3 U%  
0         0.7  
1         0.2  
...