我有一个包含一些列的 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
我试图逐行循环整个数据帧,将值提取到列表中,对其进行排序并最终创建结果。它非常慢并且导致了难看的代码。有没有更有效的方法?
请您参考如下方法:
使用DataFrame.apply使用 join 并排序:
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
