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我编辑的答案(第二)基于该问题,重点是它不是自动工作的,您必须强制返回类型,然后合并/合并