python - 根据组合条件过滤 Pandas 中的行
问题描述
总熊猫菜鸟在这里,所以请怜悯。我有一个数据样本,其中粘贴了以下形状的年度条目:
{"Country":{"0":"Italy","1":"Italy","2":"Italy","3":"Italy","4":"Italy","5":"Italy","6":"Italy","7":"France","8":"France","9":"France","10":"France","11":"France","12":"France","13":"Spain","14":"Spain","15":"Spain","16":"Spain","17":"Spain","18":"Spain","19":"Spain"},"Year":{"0":2004,"1":2005,"2":2006,"3":2007,"4":2008,"5":2009,"6":2010,"7":2006,"8":2007,"9":2008,"10":2009,"11":2010,"12":2011,"13":2007,"14":2008,"15":2009,"16":2010,"17":2011,"18":2012,"19":2013},"Revenue":{"0":1000,"1":1200,"2":1300,"3":1400,"4":1450,"5":1300,"6":1200,"7":2200,"8":2100,"9":1900,"10":2300,"11":2400,"12":2500,"13":1150,"14":1230,"15":1300,"16":1200,"17":1050,"18":900,"19":950}}
我需要一种方法来过滤所有国家的共同年份,例如,2007、2008、2009 和 2010。
我想我应该制定一个公式并应用它,但我似乎无法找到自己的方式。
解决方案
使用nunique
两次:获取唯一国家的数量n
,并过滤只有唯一国家的数量等于的年份n
n = df.Country.nunique()
s = df.groupby('Year').Country.nunique().eq(n)
>>> print(s)
Year
2004 False
2005 False
2006 False
2007 True
2008 True
2009 True
2010 True
2011 False
2012 False
2013 False
Name: Country, dtype: bool
为了获得岁月,
>>> print(s[s].index)
[2007, 2008, 2009, 2010]
也可以使用set
路口
>>> set.intersection(*df.groupby('Country').Year.agg(set))
{2007, 2008, 2009, 2010}
推荐阅读
- vue.js - vue js - 方法不改变数据
- android - Android:如何为 Android 应用使用 GCP 服务帐户
- php - 如何使用 SimpleXML 从 XML 中删除某些元素
- database - dbms 如何在事务期间保持原子性?
- c# - 如何在列的第一个空单元格中添加一个值?
- javascript - 为什么 Object.prototype.hasOwnProperty.call(Number, "toString") 返回 false?
- javascript - 如何在 fullcalendar 事件中插入自定义数据?
- javascript - 在 d3js 中为图例腾出更多空间
- php - 如何在 PHP 中使用查询结果作为条件?
- sql - 删除重复行 SQL Server?