查找pd.DataFrame列

时间:2017-09-18 18:23:04

标签: 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]: 
    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时,Ba - 这是一个完美的相关性,因为没有A1的{​​{1}}值不同于Ba - > 3d - > 4的情况也是如此。

e5并非完全相关。

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

在这种情况下,我想要的输出类似于

B

修改的: 优选地,find_imperfect_correlations(df, 'A', 'B') Out[7]: 2 -> 'b', 'c' 5 -> 'f', 'g' 的dtype何时可以是整数,日期等的广义答案

3 个答案:

答案 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值。