【发布时间】:2020-02-04 10:57:12
【问题描述】:
我正在对 pandas 中数据框的行应用一个函数。该函数返回四个值(意思是每行四个值)。实际上,这意味着从 apply 函数返回的对象是一个包含元组的 Series。我想将这些添加到他们自己的列中。我知道我可以将该输出转换为 DataFrame,然后与旧 DataFrame 连接,如下所示:
import pandas as pd
def some_func(i):
return i+1, i+2, i+3, i+4
df = pd.DataFrame(range(10), columns=['start'])
res = df.apply(lambda row: some_func(row['start']), axis=1)
# convert to df and add column names
res_df = res.apply(pd.Series)
res_df.columns = ['label_1', 'label_2', 'label_3', 'label_4']
# concatenate with old df
df = pd.concat([df, res_df], axis=1)
print(df)
我的问题是是否有更好的方法来做到这一点?特别是res.apply(pd.Series) 似乎是多余的,但我不知道更好的选择。性能对我来说是一个重要因素。
根据要求,示例输入 DataFrame 可能如下所示
start
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
以及预期的输出,添加了四列:
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
【问题讨论】:
-
示例初始数据框和预期输出可能会有所帮助
-
@sammywemmy 好吧,代码是一个 MCVE,所以你可以直接运行它。但我已经添加了示例数据,以便给您一个直观的想法。
标签: python pandas dataframe apply