列名を持つ既存のデータフレームに適用されます(複数の出力)の結果を追加するためのより良い方法

ブラムVanroy:

私はパンダにおけるデータフレームの列に関数を適用しています。その関数は(意味、行ごとに4つの値)は、4つの値を返します。実際には、この手段が適用されますが、関数から返されたオブジェクトは、タプルを含むシリーズです。私は自分の列にこれらを追加したいです。私はそうのように、データフレームにその出力を変換し、古いデータフレームと連結することができることを知っています:

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)冗長ようだが、私はより良い代替手段を知りません。パフォーマンスは私にとって重要な要因です。


要求されたとして、例えば、入力データフレームは、このようになります。

   start
0      0
1      1
2      2
3      3
4      4
5      5
6      6
7      7
8      8
9      9

そして、予想される出力、4つの追加の列を持ちます:

   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
Kevalデイブ:

直接データフレームに値を代入することは速くconcatingよりだろう。

これは、割り当てるための方法の一つであります

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)

参照してください同時にパンダに複数の列を追加する複数の列を割り当てるには、より多くの方法のために。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=21933&siteId=1