Проблема с преобразованием фрейма данных (python, pandas)

#python #pandas

#питон #панды

Вопрос:

Предположим, у меня есть следующий фрейм данных. Я хочу преобразовать его таким образом, чтобы он упорядочивался по «Оставшимся дням». Идентификаторы могут использоваться более одного раза, и все номера отчетов уникальны. Но я хочу, чтобы каждый идентификатор появлялся один раз, прежде чем уже использованный идентификатор будет использован снова.

Например, AABBCC -> ABCABC или AABCCC -> ABCACC.

Как бы я это повернул.

ID Сообщить Осталось несколько дней
171 11 5
171 12 9
182 13 1
182 14 2

в это?

ID Сообщить Осталось несколько дней
182 13 1
171 11 5
182 14 2
171 12 9

Ответ №1:

cumcount должен работать

 df.sort_values("Days Left") 
  .assign(order=lambda x: x.groupby("ID").cumcount()) 
  .sort_values(["order", "Days Left"]) 
  .drop(columns="order")
 

Ответ №2:

Мне понравилось решение

 ID=[171,171,182,182]
Report=[11,12,13,14]
DaysLeft=[5,9,1,2]

df=pd.DataFrame({'id':ID,'report':Report,'daysleft':DaysLeft})
df=df.sort_values(by="daysleft",ascending=True)
.assign(order=lambda x: x.groupby("id").cumcount())
.sort_values(by=['order','daysleft'])

output:
    id  report  daysleft  order
2  182      13         1      0
0  171      11         5      0
3  182      14         2      1
1  171      12         9      1