Python 2.7 熊猫:从一列生成多个列

Python 2.7 熊猫:从一列生成多个列,python-2.7,pandas,multiple-columns,Python 2.7,Pandas,Multiple Columns,假设我有这样一个数据帧: df = X 0 17 1 120 2 -290 现在,如果我想从X生成三个新列,即,X+12,X-12,和X+100。最终df将有4列:X、X+12、X-12和X+100 我如何以一种干净的方式做到这一点.apply仅将一列转换为另一列。如何使用此函数将一列转换为多列?有办法做到这一点吗 我正在寻找这样做的方式,最好使用。应用或任何其他合适的功能 编辑:忘记添加更多信息。我有一个函数,它接受这个值,并根据这个值生

假设我有这样一个数据帧:

    df =
        X
    0  17
    1  120
    2  -290
现在,如果我想从
X
生成三个新列,即,
X+12
X-12
,和
X+100
。最终df将有4列:
X
X+12
X-12
X+100

我如何以一种干净的方式做到这一点
.apply
仅将一列转换为另一列。如何使用此函数将一列转换为多列?有办法做到这一点吗

我正在寻找这样做的方式,最好使用。应用或任何其他合适的功能

编辑:忘记添加更多信息。我有一个函数,它接受这个值,并根据这个值生成一个值向量。我应该能够将其与以下内容结合使用:

df[['X1','X2','X3']=df.X.apply(f)

其中
f
为:

    def f(x):
      return x+12, x-12, x+100

我希望能够以这种方式生成列。这可能吗?

只需执行多个语句即可:

In [31]:

df['X+12'], df['X-12'], df['X+100'] = df+12, df-12, df+100
df
Out[31]:
     X  X+12  X-12  X+100
0   17    29     5    117
1  120   132   108    220
2 -290  -278  -302   -190
编辑

我认为由于返回值的形状和预期的返回类型,您想要做的不会起作用。另一种方法是应用lambda并连接结果:

In [66]:

pd.concat([df,df.X.apply(lambda s: pd.Series({'X+12':s+12, 'X-12':s-12, 'X+100':s+100}))], axis=1)

Out[66]:
     X  X+100  X+12  X-12
0   17    117    29     5
1  120    220   132   108
2 -290   -190  -278  -302

另外,@der_die_das_jojo也是一个不错的答案

因为你不能通过
df[['X1','X2','X3']]=..
处理尚未存在的列。 但以下方法可行:

def f(x):
  return x.add(12), x.sub(12), x.add(100)
df['X+12'], df['X-12'], df['X+100'] = f(df)

我只是编辑了我的问题,以反映我正在寻找的方式。我只是遇到了这样一个问题:我认为这就足够我想做的了。我将不得不更改f的返回类型作为dict.@prashu我编辑的答案(第二)基于该问题,重点是它不是自动工作的,您必须强制返回类型,然后合并/合并