示例数据为:
import pandas as pd
import numpy as np
d=pd.DataFrame({'lender':['tony','wood','tony','tidy'],
'borrower':['wood','tony','wood','tony']})
我想连接lender
和borrower
,最重要的是在每行中对它们进行排序。一句话,我想得到P:
排序原理与默认的sorted
函数相同。例如:
sorted(['tony','wood'])
Out[221]: ['tony', 'wood']
sorted(['wood','tony'])
Out[222]: ['tony', 'wood']
除非必须使用for循环,否则首选 apply
。
在重复我的问题之前,请仔细阅读它!
答案 0 :(得分:2)
一种解决方案是将apply
与已排序的每一行配合使用,join
:
d['p'] = d[['lender','borrower']].apply(lambda x: '_'.join(sorted(x)), axis=1)
print (d)
lender borrower p
0 tony wood tony_wood
1 wood tony tony_wood
2 tony wood tony_wood
3 tidy tony tidy_tony
将numpy.sort
与DataFrame
构造函数一起使用对性能很重要:
d1 = pd.DataFrame(np.sort(d[['lender','borrower']], axis=1))
d['p'] = d1[0] + '_' + d1[1]
print (d)
lender borrower p
0 tony wood tony_wood
1 wood tony tony_wood
2 tony wood tony_wood
3 tidy tony tidy_tony