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'])