使用熊猫按升序连接值

我有一个带有一些列的DataFrame。列为:A1,A2,A3。我想创建一个新列,将其命名为“ CON”。新列是一个字符串,由A1,A2,A3用分隔符连接在一起。串联按列的值排序。

例如:

data = pd.DataFrame({ 
    'A1' : ['b1','a1','a2'],'A2' : ['b2','a3','b1'],'A3' : ['c2','a2','a1']
  })

data['CON'] = sortedconcat(data['A1'],data['A2'],data['A3'])

预期结果是:

   A1  A2  A3       CON
0  b1  b2  c2  b1-b2-c2
1  a1  a3  a2  a1-a2-a3
2  a2  b1  a1  a1-a2-b1

我试图逐行循环整个数据帧,将值提取到列表中,对其进行排序,最后创建结果。这很慢,导致代码很丑陋。有没有更有效的方法?

chifengbin 回答:使用熊猫按升序连接值

DataFrame.applyjoin一起使用并进行排序:

data['CON'] = data.apply(lambda x: '-'.join(sorted(x)),axis=1)

列表理解的替代项:

data['CON'] = ['-'.join(sorted(x)) for x in data.values]

print (data)
   A1  A2  A3       CON
0  b1  b2  c2  b1-b2-c2
1  a1  a3  a2  a1-a2-a3
2  a2  b1  a1  a1-a2-b1
,

您可以这样做:

data['CON'] = data.apply(lambda x: '-'.join(sorted(x)),axis=1)

print(data)

 A1  A2  A3       CON
0  b1  b2  c2  b1-b2-c2
1  a1  a3  a2  a1-a2-a3
2  a2  b1  a1  a1-a2-b1
,

axis=1上的np.sortlist comprehension结合使用:

data['CON'] = ['-'.join(x) for x in np.sort(data,axis=1)]

   A1  A2  A3       CON
0  b1  b2  c2  b1-b2-c2
1  a1  a3  a2  a1-a2-a3
2  a2  b1  a1  a1-a2-b1

详细信息np.sort给我们一个排序后的数组:

np.sort(data,axis=1)

array([['b1','b2','c2'],['a1','a2','a3'],'b1']],dtype=object)

编辑仅选择某些列,可以使用locilocloc是基于标签的索引(因此带有列名),{{ 1}}是基于位置的索引。

iloc
本文链接:https://www.f2er.com/3111359.html

大家都在问