Я пытаюсь сделать несколько сложную группу и сортировать операцию в пандах. Я хочу сортировать группы по их значениям в порядке восходящего порядка, используя последовательные значения для тай -брейков по мере необходимости.
Я прочитал аналогичный вопрос 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 может вернуть нет или несколько значений для данной группы, и преобразование не может справиться с этими случаями.
Я пытаюсь сделать несколько сложную группу и сортировать операцию в пандах. [b] Я хочу сортировать группы по их значениям в порядке восходящего порядка, используя последовательные значения для тай -брейков по мере необходимости. [/b] Я прочитал аналогичный вопрос Data Prame Pandas: как сортировать группы по самым ранним временем группы, но в этом используется только минимальное значение в каждой группе для сортировки и, следовательно, не обрабатывает случай, где два группы имеют то же самое значение, но отличаются в их значении. /> Точно так же, Pandas Groupby, затем сортировка в группах обсуждает [b] в группе [/b] сортировки, но не [b] между группой [/b] сортировкой, что я и после.[code]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) [/code] Поскольку nth может вернуть нет или несколько значений для данной группы, и преобразование не может справиться с этими случаями.
Я пытаюсь сделать несколько сложную группу и сортировать операцию в пандах. Я хочу сортировать группы по их значениям в порядке восходящего порядка, используя последовательные значения для тай -брейков по мере необходимости.
Я прочитал аналогичный...
Я пытаюсь сделать несколько сложную группу и сортировать операцию в пандах. Я хочу сортировать группы по их значениям в порядке восходящего порядка, используя последовательные значения для тай -брейков по мере необходимости.
Я прочитал аналогичный...
Я пытаюсь сделать несколько сложную группу и сортировать операцию в пандах. Я хочу сортировать группы по их значениям в порядке восходящего порядка, используя последовательные значения для тай -брейков по мере необходимости.
Я прочитал аналогичный...
Я пытаюсь сделать несколько сложную группу и сортировать операцию в пандах. Я хочу сортировать группы по их значениям в порядке восходящего порядка, используя последовательные значения для тай -брейков по мере необходимости.
Я прочитал аналогичный...
Я создаю динамическую несколько строк для хранения данных в базе данных. все работает нормально на внешнем интерфейсе, поскольку создаются строки, а также выбрано несколько значений в поле docname1 выбранным. но проблема в том, что когда я...