Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不考虑顺序的情况下对数据帧中的字符串排序或检查等价性?_Python_String_Pandas_Sorting - Fatal编程技术网

Python 如何在不考虑顺序的情况下对数据帧中的字符串排序或检查等价性?

Python 如何在不考虑顺序的情况下对数据帧中的字符串排序或检查等价性?,python,string,pandas,sorting,Python,String,Pandas,Sorting,我有一个数据框,想要比较两个变量(数据框大约是20K行;最终将达到150K+) 我想比较字符串,但单词的顺序不同。如果两组在其他方面完全相同,即abc=cab,但abc!=cabe那么我想展示一个匹配,否则就是非匹配 目前,所有变量的代码都是这样设置的: ex['bt M'] = np.where(ex['bt_x'] == ex['bt_y'], 1, 0) 大多数变量都是数字,但有几个字符串我想忽略顺序或排序。我试过这个: ex['bt_x_2'] = ''.join(sorted(ex[

我有一个数据框,想要比较两个变量(数据框大约是20K行;最终将达到150K+)

我想比较字符串,但单词的顺序不同。如果两组在其他方面完全相同,即abc=cab,但abc!=cabe那么我想展示一个匹配,否则就是非匹配

目前,所有变量的代码都是这样设置的:

ex['bt M'] = np.where(ex['bt_x'] == ex['bt_y'], 1, 0)
大多数变量都是数字,但有几个字符串我想忽略顺序或排序。我试过这个:

ex['bt_x_2'] = ''.join(sorted(ex['bt_x']))

新变量“bt_x_2”似乎包含数据帧中每行“bt_x”所有行的排序结果。我想对每一行中的结果进行排序,独立于所有其他行。换句话说:申请

ex['bt_x_2'] = ''.join(sorted(ex['bt_x']))
或者使用其他方法来创建每行。我将对这两个比较字符串执行此操作,然后检查等效性。如果有更好的方法,那就太好了。我很想听一听。我已经在一些场合到处寻找一种很好的方法来做到这一点。我以前写过很多正则表达式规则,但最好不要这样做

数据帧的示例:

File Name: "file 1.pdf", "file 2.pdf"
bt_x: "Series A + Series B; Series C + D; No Common Shares", "series A-1 + B-1" 
bt_y: "Series C + D; No Common Shares; Series A + Series B", series B-1 + A-1  
dividends_x: .08, .667  
dividends_y: .11, .06667
所需输出(空格和其他符号最终不重要,无法匹配):

我擅长脱衣舞“或+或-或”

基本上,bt_x和bt_y中是否有一组完全匹配的单词和字母是我想在第三列bt_M(1,0)

中回答的问题,您可以结合使用:

输出

0     True
1     True
2    False
dtype: bool
计数器使用字符串中每个字母的计数创建字典,例如:

'abc' -> Counter({'a': 1, 'b': 1, 'c': 1})

当且仅当键和计数都相等时,计数器才相等,即,当且仅当字符串等于而不考虑字符的顺序时,计数器才相等。对于每个字符串,此解决方案为
O(n)
,而排序方法为
O(n*logn)

你能举一个数据框的例子吗?你期望的结果是什么。@DavidE添加了一个例子
0     True
1     True
2    False
dtype: bool
'abc' -> Counter({'a': 1, 'b': 1, 'c': 1})