#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