在python中搜索与多个列中的值对应的重复字符串(最好使用pandas dataframe)

时间:2018-02-26 09:15:27

标签: python pandas dataframe

我有一个包含三列的数据集,如下所示:

    X1 X5 X1
    X2 X9 X2
    X3 X3 X5
    X4 X8 X3
    X5 X1 X4

我想搜索所有列中存在的变量。在这种情况下,输出将是

    X1
    X3
    X5

有人可以帮忙在python中帮忙吗?

2 个答案:

答案 0 :(得分:0)

如果您.apply value_counts到您的专栏,您将获得以下信息:

In [25]: df
Out[25]:
    a   b   c
0  X1  X5  X1
1  X2  X9  X2
2  X3  X3  X5
3  X4  X8  X3
4  X5  X1  X4

In [26]: df.apply(pd.Series.value_counts)
Out[26]:
      a    b    c
X1  1.0  1.0  1.0
X2  1.0  NaN  1.0
X3  1.0  1.0  1.0
X4  1.0  NaN  1.0
X5  1.0  1.0  1.0
X8  NaN  1.0  NaN
X9  NaN  1.0  NaN

因此,您希望所有非空的行...

In [28]: result = df.apply(pd.Series.value_counts).notnull().all(axis=1)
In [29]: result
Out[29]:
X1     True
X2    False
X3     True
X4    False
X5     True
X8    False
X9    False
dtype: bool

并且,您可以获得价值为list的{​​{1}}个索引:

True

采用略有不同的方法:

In [30]: [i for i, x in result.iteritems() if x]
Out[30]: ['X1', 'X3', 'X5']

答案 1 :(得分:0)

我能想象的最简单的解决方案: 1.在每列中创建一组值 2.在上一步中获得的所有集合上设置交集

df = pd.DataFrame(
    {'a': ['x1', 'x2', 'x3', 'x4', 'x5'], 'b': ['x5', 'x9', 'x3', 'x8', 'x1'], 'c': ['x1', 'x1', 'x5', 'x3', 'x4']})

sets = [set(df[column]) for column in df.columns]
result = list(set.intersection(*sets))