我有一个包含三列的数据集,如下所示:
X1 X5 X1
X2 X9 X2
X3 X3 X5
X4 X8 X3
X5 X1 X4
我想搜索所有列中存在的变量。在这种情况下,输出将是
X1
X3
X5
有人可以帮忙在python中帮忙吗?
答案 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))