Pandas:从列生成多个列

时间:2014-11-27 08:55:12

标签: python-2.7 pandas multiple-columns

假设我有一个这样的数据框:

    df =
        X
    0  17
    1  120
    2  -290

现在,如果我想从X+12生成三个新列,即X-12X+100X。最终的df将包含4列:XX+12X-12X+100

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

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

编辑:忘了添加更多信息。我有一个函数,它接受这个值并从这个值生成一个值向量。我应该可以使用以下内容:

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

其中f将是:

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

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

2 个答案:

答案 0 :(得分:2)

Afaik您无法通过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)

答案 1 :(得分:1)

只需做多个陈述:

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也是一个不错的答案