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

2024-03-28 12:55:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下测向:

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

看起来像这样:

^{pr2}$

我要做的是将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

Tags: importiddataframepandasdfabfooas
3条回答

使用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

简单一点,运行速度更快:

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

10000行的说明性计时:

^{pr2}$

产量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

代码中的一个小错误,您应该使用传递到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

相关问题 更多 >