python - 将 Pandas 函数应用于列以创建多个新列?

如何在 Pandas 中做到这一点:

我有一个函数 extract_text_features在单个文本列上,返回多个输出列。具体来说,该函数返回 6 个值。

该函数有效,但似乎没有任何正确的返回类型(pandas DataFrame/numpy array/Python 列表)以便输出可以正确分配 df.ix[: ,10:16] = df.textcol.map(extract_text_features)

所以我认为我需要退回到使用 df.iterrows() 进行迭代,根据 this ?

更新: 使用 df.iterrows() 进行迭代至少慢了 20 倍,所以我放弃并将函数拆分为六个不同的 .map(lambda ...)来电。

更新 2:这个问题是在 v0.11.0 附近被问到的。 , 在可用性之前 df.apply已改进或 df.assign() 是 added in v0.16 .因此,很多问题和答案都不太相关。

最佳答案

我通常使用 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

https://stackoverflow.com/questions/16236684/

相关文章:

linux - 在 shell 中获取文件大小(以字节为单位)的可移植方法

python - 如何从字符串中删除所有空格

linux - 命令行中的处理器/内核数

python - 计算两个 Python 字典中包含的键的差异

c - unix域套接字VS命名管道?

python - 如何在 Python 中将新行附加到旧的 CSV 文件?

python - 为什么 PyPy 没有包含在标准 Python 中?

linux - 在 Linux 的沙箱中运行不受信任的 C 程序,阻止它打开文件、 fork 等?

linux - 设置 Vim 背景颜色

python - 将多个函数应用于多个 groupby 列