使用Pandas中的分隔符将选定列粘贴到新列中

时间:2015-05-28 06:21:28

标签: python pandas

我有以下DF:

import pandas as pd
df = pd.DataFrame({'col1' : ["a","b"],
            'col2'  : ["ab","XX"], 'col3' : ["w","e"], 'col4':["foo","bar"]})

看起来像这样:

In [8]: df
Out[8]:
  col1 col2 col3 col4
0    a   ab    w  foo
1    b   XX    e  bar

我想要做的是将col2, 3, 4合并到一个名为ID

的新列中
  col1 col2 col3 col4 ID
0    a   ab    w  foo ab.w.foo
1    b   XX    e  bar XX.e.bar

我怎样才能做到这一点?

我尝试了但失败了:

df["ID"] = df.apply(lambda x: '.'.join(["col2","col3","col4"]),axis=1)

In [10]: df
Out[10]:
  col1 col2 col3 col4              ID
0    a   ab    w  foo  col2.col3.col4
1    b   XX    e  bar  col2.col3.col4

3 个答案:

答案 0 :(得分:2)

代码中的一个小错误,您应该使用传递给lambda函数的x来访问这些值:

In [29]: df["ID"] = df.apply(lambda x: '.'.join([x['col2'],x['col3'],x['col4']]),axis=1)

In [30]: df
Out[30]: 
  col1 col2 col3 col4        ID
0    a   ab    w  foo  ab.w.foo
1    b   XX    e  bar  XX.e.bar

答案 1 :(得分:2)

使用x[['col2', 'col3', 'col4']]

In [54]: df.apply(lambda x: '.'.join(x[['col2', 'col3', 'col4']]),axis=1)
Out[54]:
0    ab.w.foo
1    XX.e.bar
dtype: object

答案 2 :(得分:1)

更简单一点,运行得更快:

df['id'] = df.col2 + '.' + df.col3 + '.' + df.col4

10000行的说明性时序:

>>> t1 = timeit.timeit("df['id'] = df.col2 + '.' + df.col3 +'.' + df.col4", "from __main__ import pd,df", number=100)

收益率0.00221121072769s per loop

>>> t2 = timeit.timeit("df.apply(lambda x: '.'.join(x[['col2', 'col3', 'col4']]), axis=1)","from __main__ import pd,df", number=100)

收益率3.32903954983s per loop