在数据框中的列中创建值对的 Pythonic 方法

标签 python pandas

我有一个看起来像这样的 Dataframe:

OwnerID    Value
1            A
1            B
1            C
1            D

这是简化版,我有数千个 OwnerID 值。我想为 Value 列创建对,其中每个 Value 与每个其他 Value 配对,并将结果作为对列表.

例如,对于 OwnerID 1,结果集应该是以下列表:

[A,B]

[A,C]

[A,D]

[B,C]

[B,D]

[C,D]

我可以编写 2 个 for 循环来实现这一点,但这不会非常有效或 pythonic。有人知道实现此目标的更好方法吗?

如有任何帮助,我们将不胜感激。

最佳答案

Pandas 解决方案(使用 .merge().query() 方法):

数据:

In [10]: df
Out[10]:
   OwnerID Value
0        1     A
1        1     B
2        1     C
3        1     D
4        2     X
5        2     Y
6        2     Z

解决方法:

In [9]: pd.merge(df, df, on='OwnerID', suffixes=['','2']).query("Value != Value2")
Out[9]:
    OwnerID Value Value2
1         1     A      B
2         1     A      C
3         1     A      D
4         1     B      A
6         1     B      C
7         1     B      D
8         1     C      A
9         1     C      B
11        1     C      D
12        1     D      A
13        1     D      B
14        1     D      C
17        2     X      Y
18        2     X      Z
19        2     Y      X
21        2     Y      Z
22        2     Z      X
23        2     Z      Y

如果您只需要列表:

In [17]: pd.merge(df, df, on='OwnerID', suffixes=['','2']) \
           .query("Value != Value2") \
           .filter(like='Value').values
Out[17]:
array([['A', 'B'],
       ['A', 'C'],
       ['A', 'D'],
       ['B', 'A'],
       ['B', 'C'],
       ['B', 'D'],
       ['C', 'A'],
       ['C', 'B'],
       ['C', 'D'],
       ['D', 'A'],
       ['D', 'B'],
       ['D', 'C'],
       ['X', 'Y'],
       ['X', 'Z'],
       ['Y', 'X'],
       ['Y', 'Z'],
       ['Z', 'X'],
       ['Z', 'Y']], dtype=object)

关于在数据框中的列中创建值对的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42375225/

相关文章:

python - 使用 PyQt4 将表格插入 QTextEdit

python - tkinter:在父级中显示的 Toplevel 中的框架

python - 登录多线程

csv - Pandas to_csv : how to format floats in a column with mixed types

python - 使用 pandas 和 numpy 获取差异并消除间隙时间序列数据

python,在列表中打印最长的字符串

python - Python 版本 opencv 中的 Rodrigues 函数不起作用

python-3.x - 如何在此 DataFrame 上应用函数以将日期更改为所需格式并避免 '0' 和 '-'

python - 如何在 Python pandas 数据框中拆分这些数据?

python - 使用 Pandas DataFrame.sort() 时,我可以让它真正对行重新编号吗?