gpt4 book ai didi

python - 将应用(多个输出)的结果添加到具有列名的现有 DataFrame 的更好方法

转载 作者:行者123 更新时间:2023-12-04 17:42:44 24 4
gpt4 key购买 nike

我正在 Pandas 数据框的行上应用一个函数。该函数返回四个值(即每行四个值)。实际上,这意味着从 apply 函数返回的对象是一个包含元组的系列。我想将这些添加到他们自己的列中。我知道我可以将该输出转换为 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

最佳答案

直接为 DataFrame 赋值会比串联要快。

这是分配的方式之一

df = pd.DataFrame(range(10), columns=['start'])

df['label_1'], df['label_2'], df['label_3'], df['label_4'] = zip(*[some_func(x) for x in df['start']])

这比 res.apply(pd.Series) 快.

引用 adding multiple columns to pandas simultaneously有关分配多列的更多方法。

关于python - 将应用(多个输出)的结果添加到具有列名的现有 DataFrame 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60055863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com