Чтобы получить точный вывод по вашему желанию, изменив код:
def myfunc(mydf):
return mydf.value.astype(str)+mydf.group
df.groupby('group').apply(myfunc).reset_index(level=0, drop=True)
Дополнительная заметка может ответить на ваше любопытство.
SeriesGroupBy
Выполнение df.groupby('group').value
приведет к объекту SeriesGroupBy
столбца value
, сгруппированному по столбцу group
, поэтому при вызове .apply
в коде он ожидал Series (столбец value
)) в качестве аргумента вашей функции.
df.groupby('group').value.apply(lambda x: x.astype(str)+group))
# x is Series of column 'value'. This will raise error, since 'group' isn't recognized`
df.groupby('group').value.apply(lambda x: x.astype(str)+df.group))
# use dataframe 'df' to access column 'group'
DataFrameGroupBy
С другой стороны, выполнение df.groupby('group')
приведет к объекту DataFrameGroupBy
, так чтовызов .apply
будет ожидать Dataframe в качестве аргумента вашей функции.Следовательно, вы можете получить доступ ко всем столбцам, например:
df.groupby('group').apply(lambda x: x.value.astype(str)+x.group)
# here x is a dataframe, it can access all columns.