我有以下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
答案 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