Python 将选定列粘贴到带有分隔符的新列中
我有以下建议:Python 将选定列粘贴到带有分隔符的新列中,python,pandas,Python,Pandas,我有以下建议: 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 我想做的是将col
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
如果代码中有一个小的输入错误,您应该使用传递到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
如果代码中有一个小的输入错误,您应该使用传递到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
使用
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
使用
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行的说明性计时:
>>> t1 = timeit.timeit("df['id'] = df.col2 + '.' + df.col3 +'.' + df.col4", "from __main__ import pd,df", number=100)
每个循环的收益率0.00221121072769s
>>> t2 = timeit.timeit("df.apply(lambda x: '.'.join(x[['col2', 'col3', 'col4']]), axis=1)","from __main__ import pd,df", number=100)
每个循环生成
3.32903954983s
稍微简单一点,运行速度更快:
df['id'] = df.col2 + '.' + df.col3 + '.' + df.col4
>>> t2 = timeit.timeit("df.apply(lambda x: '.'.join(x[['col2', 'col3', 'col4']]), axis=1)","from __main__ import pd,df", number=100)
10000行的说明性计时:
>>> t1 = timeit.timeit("df['id'] = df.col2 + '.' + df.col3 +'.' + df.col4", "from __main__ import pd,df", number=100)
每个循环的收益率0.00221121072769s
>>> t2 = timeit.timeit("df.apply(lambda x: '.'.join(x[['col2', 'col3', 'col4']]), axis=1)","from __main__ import pd,df", number=100)
每个循环的产量3.32903954983s
>>> t2 = timeit.timeit("df.apply(lambda x: '.'.join(x[['col2', 'col3', 'col4']]), axis=1)","from __main__ import pd,df", number=100)