Если вы вернете pd.Series
из своей функции, то Pandas превратит его элементы в столбцы результирующего кадра данных при вызове apply()
.
Если вы используете индекс для Серии, элементы в индексе станут именами столбцов результирующего DataFrame.
В вашем случае:
res_index = pd.Index([
'label_1',
'label_2',
'label_3',
'label_4',
])
res_df = df.apply(
lambda row: pd.Series(some_func(row['start']), index=res_index),
axis=1,
)
df = pd.concat([df, res_df], axis=1)
print(df)
Возможно, чуть чище для res_df
- применить его только к серии :
res_df = df['start'].apply(
lambda i: pd.Series(some_func(i), index=res_index),
)
Если вы готовы переписать свой some_func
, чтобы вернуть pd.Series
напрямую:
def some_func(i, index=None):
return pd.Series(
[i+1, i+2, i+3, i+4],
index=index,
)
res_index = pd.Index([
'label_1',
'label_2',
'label_3',
'label_4',
])
res_df = df['start'].apply(some_func, index=res_index)
df = pd.concat([df, res_df], axis=1)
print(df)
Все вышеперечисленное вернет ожидаемый результат:
start label_1 label_2 label_3 label_4
0 0 1 2 3 4
1 1 2 3 4 5
2 2 3 4 5 6
3 3 4 5 6 7
4 4 5 6 7 8
5 5 6 7 8 9
6 6 7 8 9 10
7 7 8 9 10 11
8 8 9 10 11 12
9 9 10 11 12 13