Как сортировать группы панд по (множественным/всем) значениям групп?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как сортировать группы панд по (множественным/всем) значениям групп?

Сообщение Anonymous »

Я пытаюсь сделать несколько сложную группу и сортировать операцию в пандах. Я хочу сортировать группы по их значениям в порядке восходящего порядка, используя последовательные значения для тай -брейков по мере необходимости.
Я прочитал аналогичный вопрос Data Prame Pandas: как сортировать группы по самым ранним временем группы, но в этом используется только минимальное значение в каждой группе для сортировки и, следовательно, не обрабатывает случай, где два группы имеют то же самое значение, но отличаются в их значении. /> Точно так же, Pandas Groupby, затем сортировка в группах обсуждает в группе сортировки, но не между группой сортировкой, что я и после.

Код: Выделить всё

df = pd.DataFrame({"pool": [5, 1, 9, 9, 5, 7, 7, 7, 9, 1, 5],
"arrival":[227, 60, 60, 88, 55, 55, 276, 46, 46, 35, 35]})
< /code>
Я хочу сортировать пулы по прибытии, так что полученным данным: < /p>
    pool  arrival
10     5       35
4      5       55
0      5      227
9      1       35
1      1       60
7      7       46
5      7       55
6      7      276
8      9       46
2      9       60
3      9       88
< /code>
Я смог выполнить это с помощью следующего кода: < /p>
# create column to indicate order of values in each group
df = df.sort_values("arrival")
df["order"] = df.groupby("pool")["arrival"].cumcount()

# use 'order' column to make columns for each arrival position
df["first"] = df["second"] = df["third"] = np.nan
df.loc[df["order"] == 0,"first"] = df.loc[df["order"] == 0,"arrival"]
df.loc[df["order"] == 1,"second"] = df.loc[df["order"] == 1,"arrival"]
df.loc[df["order"] == 2,"third"] = df.loc[df["order"] == 2,"arrival"]

# propagate the values to every member of the group
df[["first","second","third"]] = df.groupby("pool")[["first","second","third"]].transform("max")

# for groups with less than three members, fill the values with previous ones
df["second"] = df["second"].fillna(df["first"])
df["third"] = df["third"].fillna(df["second"])

# sort by the arrival position columns, then drop all the helper columns
df = df.sort_values(["first","second","third","pool"]).drop(columns=["first","second","third","order"])
< /code>
работает, но он не особенно масштабируется для пулов с большим количеством прибывающих (20+). Я убежден, что должен быть лучший способ, но я не могу понять, как это сделать. Transform (name) 
Поскольку nth может вернуть нет или несколько значений для данной группы, и преобразование не может справиться с этими случаями.


Подробнее здесь: https://stackoverflow.com/questions/797 ... the-groups
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как сортировать группы панд по (множественным/всем) значениям групп?
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как сортировать группы панд по (множественным/всем) значениям групп?
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как сортировать группы панд по (множественным/всем) значениям групп?
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как сортировать группы панд по (множественным/всем) значениям групп?
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Отправка и доступ к повторяющимся значениям полей с множественным выбором
    Anonymous » » в форуме Php
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»