gpt4 book ai didi

python - 如何比较 itertools.combinations 中的元素?

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:03 28 4
gpt4 key购买 nike

我想比较两个series中的元素.

0    1
1 3
2 4
3 2
4 4
Name: s1, dtype: int32
0 3
1 3
2 0
3 5
4 1
Name: s2, dtype: int64

为了比较series很容易,我用了itertools.combinations :

x = combinations(s1, 2)
y = combinations(s2, 2)

和结果 x :

(1, 3)
(1, 4)
(1, 2)
(1, 4)
(3, 4)
(3, 2)
(3, 4)
(4, 2)
(4, 4)
(2, 4)

:

(3, 3)
(3, 0)
(3, 5)
(3, 1)
(3, 0)
(3, 5)
(3, 1)
(0, 5)
(0, 1)
(5, 1)

比较的方法部分类似于 Kendall 的 tau 距离。 x 中的对 (x1, x2) ,以及 y (y1, y2) 中的对.如果x1 > x2y1 > y2 , 或 x1 < x2y1 < y2 , 然后 score = score+1 ;否则,score = score .但到目前为止,我仍然想不出一种方法来比较对中的元素。


我得到 m1 , m2 , 和 m1|m2 :

m1:

0    False
1 False
2 False
3 False
4 False
5 False
6 False
7 False
8 False
9 False
dtype: bool

平方米:

0    False
1 False
2 True
3 False
4 False
5 False
6 False
7 False
8 False
9 False
dtype: bool

m1|m2 :

0    False
1 False
2 True
3 False
4 False
5 False
6 False
7 False
8 False
9 False
dtype: bool

我得到的结果和你的一样。我不知道为什么加起来这么多时间。


m1 和 m2 都包含默认值中的所有假值。确实如此,目前的结果非常正确。但我想要 score每次加1 (m1 | m2) == true .

score
0
0
1
0
0
0
0
0
0
0

如上得分的理想结果。

最佳答案

您可以从输出创建DataFrame,然后根据条件修改数据:

#changed data for better sample
s1 = pd.Series([1,3,4,2,4])
s2 = pd.Series([3,4,0,5,8])

x = combinations(s1, 2)
y = combinations(s2, 2)

dfx = pd.DataFrame(list(x)).rename(columns=lambda x: x+1).add_prefix('x')
dfy = pd.DataFrame(list(y)).rename(columns=lambda x: x+1).add_prefix('y')
df = pd.concat([dfx, dfy], axis=1)

m1 = (df.x1 > df.x2) & (df.y1 > df.y2)
m2 = (df.x1 < df.x2) & (df.y1 < df.y2)
m = m1 | m2

print (m)
0 True
1 False
2 True
3 True
4 False
5 False
6 True
7 False
8 False
9 True
dtype: bool

df['score'] = np.where(m, m.cumsum(), 0)
print (df)
x1 x2 y1 y2 score
0 1 3 3 4 1
1 1 4 3 0 0
2 1 2 3 5 2
3 1 4 3 8 3
4 3 4 4 0 0
5 3 2 4 5 0
6 3 4 4 8 4
7 4 2 0 5 0
8 4 4 0 8 0
9 2 4 5 8 5

关于python - 如何比较 itertools.combinations 中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54704439/

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