首页 > 解决方案 > 如何将一列中的所有值相互比较

问题描述

我需要将一列中的每个值与同一列中的每个值进行比较。我需要使用排列。

例如,我有以下数据框:

name | value
  A  |  2
  B  |  3
  C  |  1
  D  |  5

我需要像这样比较“名称”列上的每个字母:

name_1 | name_2 | value_1 | value_2
  A    |   B    |    2    |   3
  A    |   C    |    2    |   1
  A    |   D    |    2    |   5
  B    |   A    |    3    |   2
  B    |   C    |    3    |   1
  B    |   D    |    3    |   5
  C    |   A    |    1    |   2
  C    |   B    |    1    |   3
  C    |   D    |    1    |   5
  D    |   A    |    5    |   2
  D    |   B    |    5    |   3
  D    |   C    |    5    |   1

我怎样才能做到这一点?有没有熊猫的方法可以做到这一点?

提前致谢!

标签: pythonpandasdataframe

解决方案


您可以进行自合并和查询:

(df.assign(dummy=1)
   .merge(df.assign(dummy=1), on='dummy', suffixes=['_1','_2'])
   .query('name_1 != name_2')
   .drop('dummy', axis=1)
   .sort_index(axis=1)
)

输出:

   name_1 name_2  value_1  value_2
1       A      B        2        3
2       A      C        2        1
3       A      D        2        5
4       B      A        3        2
6       B      C        3        1
7       B      D        3        5
8       C      A        1        2
9       C      B        1        3
11      C      D        1        5
12      D      A        5        2
13      D      B        5        3
14      D      C        5        1

推荐阅读