如何检查 Dataframe (Pandas)中是否存在所有可能的列组合?

jljoyd4f  于 2023-04-28  发布在  其他
关注(0)|答案(2)|浏览(95)

我有以下 Dataframe

A   B   ... 
0   1   1 
1   1   2
2   1   3
0   2   1 
1   2   2
2   2   3

我想检查数据框是否是每列中条目的完整组合。在上面的数据框中就是这种情况。A = {1,2} B = {1,2,3}并且数据框包含所有可能的组合。下面的示例将导致false。

A   B 
0   1   1 
1   1   2
0   2   1

列数应灵活。
非常感谢您的帮助!

u3r8eeie

u3r8eeie1#

df = pd.DataFrame({'A': [1,1,1,2,2,2],
                   'B': [1,2,3,1,2,3]})

创建所有列中包含唯一值的所有组合的数据框

uniques = [df[i].unique().tolist() for i in df.columns]
df_combo = pd.DataFrame(product(*uniques), columns = df.columns)
print(df_combo)

   A  B
0  1  1
1  1  2
2  1  3
3  2  1
4  2  2
5  2  3

测试两个 Dataframe 是否包含相同的元素

df.equals(df_combo)
True

对于假场景,

df = pd.DataFrame({'A': [1,1,2],
                   'B': [1,2,1]})

df_combo
   A  B
0  1  1
1  1  2
2  2  1
3  2  2

df.equals(df_combo)
False
tyu7yeag

tyu7yeag2#

不需要生成新 Dataframe 的另一选项将是仅将去重复组合的数量与数量唯一性的乘积进行比较:

df = pd.DataFrame({'A': [1,1,1,2,2,2],
               'B': [1,2,3,1,2,3],
                'C': [1,2,3,4,5,6]})

df[['A','B']].drop_duplicates().shape[0] == df[['A','B']].nunique().prod()
True

相关问题