查找重新排列后具有相同值的列

Find columns with the same values rearranged

我想在两列中查找仅在列之间值的重新排列方面不同的值。在找到第二个事件的情况下找到匹配值的位置(例如:3-b / b-3 和 a-3 / 3-a) - 放下单位。 为了能够从数据框中排除重复项,这是必要的。没有循环是可取的,因为有很多行

import numpy as np


table = pd.DataFrame({'id_1': [a, 2, 2, b, 3, 3],
                  'id_2': [3, 4, 5, 3, b, a],})

Result_table=pd.DataFrame({'id_1': [1, 2, 2, 2, 3, 3],
          'id_2': [3, 4, 5, 3, 2, 1],
          'Result':[0, 0, 0, 0, 1, 1]})

>>> Result_table 
  id_1  id_2    Result
0   a   3   0
1   b   4   0
2   b   5   0
3   b   3   0
4   3   b   1
5   3   a   1

首先我们使用 np.sort 对行进行排序,因此 3, 1 变为 1, 3。 然后我们使用 groupby.cumcount 为每一行提供一个标志:

dft = pd.DataFrame(np.sort(table, axis=1), columns=table.columns)
df['Result'] = dft.groupby(['id_1', 'id_2']).cumcount()

   A  B  Result
0  1  a       0
1  1  a       0
2  2  b       0
3  3  c       0
4  3  c       1
5  4  d       1

您可以通过对行应用 frozenset 来创建 Series 对象并将它们分组

>>> df
   id_1  id_2
0     1     3
1     2     4
2     2     5
3     2     3
4     3     2
5     3     1
>>> df["Result"] = df.groupby(df.agg(frozenset, axis=1)).cumcount()
>>> df
   id_1  id_2  Result
0     1     3       0
1     2     4       0
2     2     5       0
3     2     3       0
4     3     2       1
5     3     1       1