Python 熊猫:从显示超过X次的列中获取值
我在pandas中有一个数据框,希望获得某个列中出现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
>>> 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])注意:valuevalue\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