#python #pandas #dataframe
Вопрос:
У меня есть более или менее простой вопрос, так как меня беспокоит мое текущее решение. Пожалуйста, обратите внимание, что приведенный код является лишь простым примером, и мне действительно не нужна длина группы, но я хочу сделать в ней еще кое-что в будущем.
Итак, мой текущий код выглядит следующим образом:
mylist = []
def get_length(group):
#do stuff with group e.g. return len
geoRoutes.append(len(group))
df_.groupby(["A","B","C","D"]).apply(get_count)
То, что я хочу иметь, — это что-то вроде этого:
def get_length(group):
#do stuff with group e.g. return len
return len(group)
myList = []
myList.append(df_.groupby(["A","B","C","D"]).apply(get_count))
Другими словами, мне было интересно, существует ли аналогичная функция, такая как apply, которая не будет пытаться изменить фрейм данных, а буквально просто выполнит функцию для каждой строки/подмножества фрейма.
Комментарии:
1. Я считаю,
.apply
что сinplace=False
помощью set (который используется по умолчанию) не изменяет набор данных и возвращает новый. Такapply
что делает именно то, что вы хотите.2. да, но он подумал, что может быть решение, при котором набор данных вообще не возвращается. Так что просто функция apply, где я могу использовать возвращаемое значение: в данном случае длина группы в разделенном списке, которая вообще не связана с исходным фреймом данных
3. Значит
df_.groupby(["A","B","C","D"]).apply(get_count)
, ничего не возвращает?
Ответ №1:
Я бы настоятельно рекомендовал выполнить обычную групповую проверку, а затем использовать tolist
:
df = pd.DataFrame({"a": [1, 1, 2], "b": [1, 1, 1]})
df.groupby("a").apply(len).tolist()
Out[1]: [2, 1]