熊猫如何在每一行中对连接的字符串进行排序?

时间:2019-03-14 08:00:20

标签: python python-3.x pandas

示例数据为:

import pandas as pd
import numpy as np
d=pd.DataFrame({'lender':['tony','wood','tony','tidy'],
                'borrower':['wood','tony','wood','tony']})

enter image description here

我想连接lenderborrower,最重要的是在每行中对它们进行排序。一句话,我想得到P:

enter image description here

排序原理与默认的sorted函数相同。例如:

sorted(['tony','wood'])
Out[221]: ['tony', 'wood']

sorted(['wood','tony'])
Out[222]: ['tony', 'wood']
除非必须使用for循环,否则首选

apply。 在重复我的问题之前,请仔细阅读它!

1 个答案:

答案 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.sortDataFrame构造函数一起使用对性能很重要:

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