Python 熊猫:从显示超过X次的列中获取值

Python 熊猫:从显示超过X次的列中获取值,python,pandas,Python,Pandas,我在pandas中有一个数据框,希望获得某个列中出现X次以上的所有值。我知道这应该很容易,但不知何故,我目前的尝试并没有取得任何进展 以下是一个例子: >>> df2 = pd.DataFrame([{"uid": 0, "mi":1}, {"uid": 0, "mi":2}, {"uid": 0, "mi":1}, {"uid": 0, "mi":1}]) >>> df2 mi uid 0 1 0 1 2 0 2 1

我在pandas中有一个数据框,希望获得某个列中出现X次以上的所有值。我知道这应该很容易,但不知何故,我目前的尝试并没有取得任何进展

以下是一个例子:

>>> df2 = pd.DataFrame([{"uid": 0, "mi":1}, {"uid": 0, "mi":2}, {"uid": 0, "mi":1}, {"uid": 0, "mi":1}])
>>> df2

    mi  uid
0    1   0
1    2   0
2    1   0
3    1   0
现在假设我想从列“mi”中获取出现2次以上的所有值,结果应该是

>>> <fancy query>
array([1])
但是我现在如何使用它来获得mi的值呢

任何提示都很感激:)

或者这个怎么样:

创建表:

>>> import pandas as pd
>>> df2 = pd.DataFrame([{"uid": 0, "mi":1}, {"uid": 0, "mi":2}, {"uid": 0, "mi":1}, {"uid": 0, "mi":1}])
获取每次事件的计数:

>>> vc = df2.mi.value_counts()
>>> print vc
1    3
2    1
打印出现2次以上的内容:

>>> print vc[vc > 2].index[0]
1
我用这个:

 df2.mi.value_counts().reset_index(name="count").query("count > 5")["index"]

query()
前面的部分为我提供了一个包含两列的数据框:
index
count
query()
过滤
count
,然后我们提取值。

我发现@juniper提供的解决方案存在问题-
from collections import Counter

counts = Counter(df2.mi)
df2[df2.mi.isin([key for key in counts if counts[key] > 2])]
如果有两个以上的值满足您的条件,则不会打印它们。例如:

>>> check=pd.DataFrame({'YOB':[1991,1992,1993,1991,1995,1994,1992,1991]})

>>>vc = check.YOB.value_counts()
>>>vc
1991    3
1992    2
1995    1
1994    1
1993    1
Name: YOB, dtype: int64
比如说,我们希望找到出现不止一次的年份:

>>>vc[vc>1]
1991    3
1992    2
Name: YOB, dtype: int64
如果我们现在想要访问实际值,我们需要执行以下操作:

>>>vc[vc>1].index.tolist()
[1991,1992]
而不是通过索引调用它,索引只会打印出第一个值:

>>>vc[vc>1].index[0]
1991

与@nicolaskruchten类似,略短一些

 df2.mi.value_counts().loc[lambda x: x>5].reset_index()['index']
如果你不需要在一个意甲联赛中取得成绩,只需这样做:

df2.mi.value_counts().loc[lambda x: x>5].index

很酷,很管用!我猜这不是最优雅的方式,因为它返回一个索引,但如果我将所选内容包装在
np.array
中,它会完成以下工作:
np.array(vc[vc>2.index)
。谢谢无需创建新数组,index对象包含一个数组vc[vc>2]。index.values返回数组([1])注意:value
value\u counts
counts()
慢得多,但此解决方案仅打印出索引指定的第一个元素。如果有多个值满足条件,则不会打印它们!有没有一种更实用的方式<代码>vc=df2.mi.value_counts();vc[vc>2]无需定义单独的
vc
变量?这是最快也是最好的答案!!不错。看看我的答案,也许你也会感兴趣:)@nicolaskruchtenExcellent。我已经找了很长时间了。这是一个惊人的解决方案,使用
loc
value\u counts()
df2.mi.value_counts().loc[lambda x: x>5].index