Python 查找pd.DataFrame列之间的解相关

Python 查找pd.DataFrame列之间的解相关,python,pandas,Python,Pandas,我有一个数据集,其中两列具有几乎完美的相关性,这意味着当一列具有某个值时,第二列具有另一个特定值的可能性非常高,例如: df = pd.DataFrame({'A': [1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5], 'B': ['a', 'a', 'a', 'a', 'a', 'a', 'b', 'c', 'd', 'd', 'e', 'e', 'f', 'f', 'g']}) print(df) Out[6]

我有一个数据集,其中两列具有几乎完美的相关性,这意味着当一列具有某个值时,第二列具有另一个特定值的可能性非常高,例如:

df = pd.DataFrame({'A': [1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5],
                   'B': ['a', 'a', 'a', 'a', 'a', 'a', 'b', 'c', 'd', 'd', 'e', 'e', 'f', 'f', 'g']})
print(df)

Out[6]: 
    A  B
0   1  a
1   1  a
2   1  a
3   1  a
4   1  a
5   1  a
6   2  b
7   2  c
8   3  d
9   3  d
10  4  e
11  4  e
12  5  f
13  5  f
14  5  g
当列
A
的值为
1
时,
B
将具有
A
-这是一个完美的相关性,因为
A
A
值与
A
B
值不同。对于
3
->
d
4
->
e
,情况也是如此

5
2
不是完全相关的

我如何找到具有多个匹配
B
值的所有
A
值,以便将它们全部打印出来

在这种情况下,我想要的输出是

find_imperfect_correlations(df, 'A', 'B')

Out[7]:
2 -> 'b', 'c'
5 -> 'f', 'g'
编辑: 最好是当
B
的数据类型可以是整数、日期等时的一般答案。

iuic,您可以

In [562]: s = df.groupby('A')['B'].unique()

In [563]: s[s.str.len() > 1]
Out[563]:
A
2    [b, c]
5    [f, g]
dtype: object

输出:

2 -> ['b' 'c']
5 -> ['f' 'g']

这一点也会起作用:

grouped = df.groupby('A').B.nunique()
df_grouped = grouped.to_frame().reset_index()
decorrelated = df_grouped[df_grouped['B'] > 1]

print(decorrelated['A'])

第一行为A列中的每个值计算B列中的不同值。第二行将结果系列转换为数据帧。第三行选择不同值数大于1的行。然后最后一行打印A值。

看起来很棒!当
B
的数据类型未知时,是否有更通用的方法?(编辑原始帖子)-也许你的第一个版本是广义的?
2 -> ['b' 'c']
5 -> ['f' 'g']
grouped = df.groupby('A').B.nunique()
df_grouped = grouped.to_frame().reset_index()
decorrelated = df_grouped[df_grouped['B'] > 1]

print(decorrelated['A'])