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

标签 python pandas merge multiple-columns return-type

如何在 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

关于python - 将 Pandas 函数应用于列以创建多个新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16236684/

相关文章:

javascript - 使用 selenium 检查 javascript 异常?

python - 如何创建包含所有相关文本的单个列?

python - 有条件地将几列替换为 Pandas 中的默认值

c# - 如何相互合并 DLL

适合初学者的 Python 备忘单?

python - Pygame 中的颜色碰撞检测

python - 使用精确开始周期重新采样数据帧

python - Pandas 按 2 列的条件按聚合数据框分组

c# - 合并两个字典 Dictionary<string, Dictionary<string, Object>>

r - 更新 XTS 对象