我正在检查无序值的元组是否已在另一个列表中。我是 Python 新手,所以没有太多使用集合,但我是 pandas 的重度用户,因此很高兴在检查某些内容的切片是否在另一个元组中时发现这个问题。
MRE 对我的用例很有用,谢谢@forgetso,但我增加了一个复杂性:框架中的每个值都是一个无序元组。
import pandas as pd
c1 = [("a", "b", "c", "e"), ("f", "g", "j"), ("a", "z", "x", "q"), ("q", "w", "e", "r")]
c2 = ["a", "f", "s", "g"]
c3 = ["q", "w", "e", "r"]
df1 = pd.DataFrame({
"A": c1,
"B": c2,
"C": c3
})
c1 = [("e", "c", "d", "a"), ("f", "g", "j"), ("a", "z", "x", "q"), ("q", "w", "e", "r")]
c2 = ["a", "f", "s", "g"]
c3 = ["q", "w", "e", "r"]
df2 = pd.DataFrame({
"A": c1,
"B": c2,
"C": c3
})
使两个框架看起来像这样:
A B C
0 (a, b, c, e) a q
1 (f, g, j) f w
2 (a, z, x, q) s e
3 (q, w, e, r) g r
和
A B C
0 (e, c, d, a) a q
1 (f, g, j) f w
2 (a, z, x, q) s e
3 (q, w, e, r) g r
例如,df2 中 A 的值都已经在 df1 中的 A 中,即使 df.iloc[0, "A"] 的顺序不同。
对复杂性表示歉意,但是数据框真的是实现我所追求的目标的最佳方式吗?或者我应该转向集合?
如果你想查看 df1.A 中的无序值元组是否已经在 df2.A 中,你可以先创建它们的设置值,然后进行比较:
df1_a_set = pd.Series([set(i) if isinstance(i, tuple) else i for i in
df1.A])
print(df1_a_set)
df2_a_set = pd.Series([set(i) if isinstance(i, tuple) else i for i in
df2.A])
print(df2_a_set)
print(df1_a_set.isin(df2_a_set))
0 {b, c, e, a}
1 {f, g, j}
2 {z, x, q, a}
3 {r, e, w, q}
dtype: object
0 {a, d, c, e}
1 {f, g, j}
2 {z, x, q, a}
3 {r, e, w, q}
dtype: object
0 False
1 True
2 True
3 True
dtype: bool