假设我有一个这样的数据框:
df =
X
0 17
1 120
2 -290
现在,如果我想从X+12
生成三个新列,即X-12
,X+100
和X
。最终的df将包含4列:X
,X+12
,X-12
和X+100
。
我如何以干净的方式做到这一点? .apply
仅将列转换为另一列。如何使用此函数将一列转换为多列?有没有办法做到这一点?
我正在寻找Pandas这样做的方式,最好使用.apply或任何其他合适的功能。
编辑:忘了添加更多信息。我有一个函数,它接受这个值并从这个值生成一个值向量。我应该可以使用以下内容:
df[['X1','X2','X3']] = df.X.apply(f)
其中f
将是:
def f(x):
return x+12, x-12, x+100
我希望能够以这种方式生成列。这可能吗?
答案 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也是一个不错的答案