gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:29 25 4
gpt4 key购买 nike

我有一个看起来像这样的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com