我有一个数据集,其中两列具有几乎完美的相关性,这意味着当一列具有特定值时,第二列很可能具有另一个特定值,例如:
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
值1
的{{1}}值不同于B
。 a
- > 3
,d
- > 4
的情况也是如此。
e
和5
并非完全相关。
如何查找具有多个匹配2
值的所有A
值,以便我可以将它们全部打印出来?
在这种情况下,我想要的输出类似于
B
修改的:
优选地,find_imperfect_correlations(df, 'A', 'B')
Out[7]:
2 -> 'b', 'c'
5 -> 'f', 'g'
的dtype何时可以是整数,日期等的广义答案
答案 0 :(得分:1)
IIUIC,你可以
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
或者
In [564]: s[s.str.len() > 1].str.join(', ')
Out[564]:
A
2 b, c
5 f, g
dtype: object
答案 1 :(得分:1)
string.Concat(people.Zip(
Enumerable.Range(0, people.Count).Select(x => " "),
(p, s) => p.Name + s)).Trim()
输出:
def find_imperfect_correlations(df, col1, col2):
df_out = df.groupby(col1).filter(lambda x: x[col2].nunique()>1).groupby(col1)[col2].apply(lambda x:x.unique())
for i in df_out.iteritems():
print(str(i[0]) + ' -> ' + str(i[1]))
find_imperfect_correlations(df, 'A', 'B')
答案 2 :(得分:0)
这个也可行:
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值。