查找重新排列后具有相同值的列
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
我想在两列中查找仅在列之间值的重新排列方面不同的值。在找到第二个事件的情况下找到匹配值的位置(例如: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