Подтвердить что ты не робот

Как сгруппировать серию по значениям в pandas?

В настоящее время у меня есть pandas Series с dtype Timestamp, и я хочу сгруппировать его по дате (и иметь много строк с разными временами в каждой группе).

Казалось бы, очевидный способ сделать это будет чем-то похожим на

grouped = s.groupby(lambda x: x.date())

Однако pandas 'groupby группирует Серии по его индексу. Как это сделать вместо группы?

4b9b3361

Ответ 1

grouped = s.groupby(s)

Или же:

grouped = s.groupby(lambda x: s[x])

Ответ 2

Вы должны преобразовать его в DataFrame, а затем добавить столбец, который является date(). Вы можете делать groupby в DataFrame с столбцом даты.

df = pandas.DataFrame(s, columns=["datetime"])
df["date"] = df["datetime"].apply(lambda x: x.date())
df.groupby("date")

Затем "дата" становится вашим индексом. Вы должны сделать это так, потому что для конечного сгруппированного объекта нужен индекс, чтобы вы могли делать такие вещи, как выбрать группу.

Ответ 3

Три метода:

DataFrame: pd.groupby(['column']).size()

Серия: sel.groupby(sel).size()

Серия для DataFrame:

pd.DataFrame( sel, columns=['column']).groupby(['column']).size()

Ответ 4

Для тех, кто хочет сделать это встроенным, не добавляя лямбду (что приводит к снижению производительности):

s.to_frame(0).groupby(0)[0]

Ответ 5

Чтобы добавить другое предложение, я часто использую следующее, поскольку оно использует простую логику:

pd.Series(index=s.values).groupby(level=0)