複数の新しい列を作成するには、列に pandas 関数を適用しますか? 質問する

複数の新しい列を作成するには、列に pandas 関数を適用しますか? 質問する

これをパンダで行う方法:

単一のテキスト列に複数の出力列を返す関数がありますextract_text_features。具体的には、関数は 6 つの値を返します。

関数は動作しますが、出力が正しく割り当てられるような適切な戻り値の型(pandas DataFrame / numpy配列/ Pythonリスト)がないようです。df.ix[: ,10:16] = df.textcol.map(extract_text_features)

df.iterrows()だから、私は の繰り返しに戻る必要があると思う。これ?

更新: 反復処理はdf.iterrows()少なくとも 20 倍遅くなるため、諦めて関数を 6 つの個別の.map(lambda ...)呼び出しに分割しました。

更新2: この質問は再び聞かれましたバージョン0.11.0、使いやすさがdf.apply改善される前、またはdf.assign()だったv0.16で追加したがって、質問と回答の多くはあまり関連性がありません。

ベストアンサー1

私は通常、以下を使用してこれを行いますzip:

>>> df = pd.DataFrame([[i] for i in range(10)], columns=['num'])
>>> df
    num
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9

>>> def powers(x):
>>>     return x, x**2, x**3, x**4, x**5, x**6

>>> df['p1'], df['p2'], df['p3'], df['p4'], df['p5'], df['p6'] = \
>>>     zip(*df['num'].map(powers))

>>> df
        num     p1      p2      p3      p4      p5      p6
0       0       0       0       0       0       0       0
1       1       1       1       1       1       1       1
2       2       2       4       8       16      32      64
3       3       3       9       27      81      243     729
4       4       4       16      64      256     1024    4096
5       5       5       25      125     625     3125    15625
6       6       6       36      216     1296    7776    46656
7       7       7       49      343     2401    16807   117649
8       8       8       64      512     4096    32768   262144
9       9       9       81      729     6561    59049   531441

おすすめ記事