当前位置: 首页 > 知识库问答 >
问题:

按两列进行筛选(python)

漆雕奇
2023-03-14

我有一个熊猫DataFrame(df),有很多列,其中两个是“年”和“col_1”

我还有一个列表中总结的提取标准(标准):

[1234,5432,...,54353,654,1234].

如果满足以下条件,我想提取此数据帧的子集:

((df.Year==1990) & (df.col_1>=Criteria[0])) or

((df.Year==1991) & (df.col_1>=Criteria[1])) or

((df.Year==1992) & (df.col_1>=Criteria[2])) or 

...

((df.Year==2010) & (df.col_1>=Criteria[20])) or

((df.Year==2011) & (df.col_1>=Criteria[21]))

虽然我可以列出所有这些标准的组合,但我想在一个简短的行中这样做,比如:

df = df[df[['col_1','col_2']].apply(lambda x: f(*x), axis=1)]

(来自如何按多列筛选数据帧)

请告诉我怎么做。非常感谢。

共有1个答案

蒙胤
2023-03-14

示例数据

df = pd.DataFrame({'col_1':[2000,1,54353,5],
                   'Year':[1990,1991,1992,1993],
                   'a':range(4)})

print (df)
   col_1  Year  a
0   2000  1990  0
1      1  1991  1
2  54353  1992  2
3      5  1993  3

按条件和年份组合创建帮助器字典

Criteria = [1234,5432,54353,654,1234]
years = np.arange(1990, 1990 + len(Criteria))
d = dict(zip(years, Criteria))
print (d)
{1990: 1234, 1991: 5432, 1992: 54353, 1993: 654, 1994: 1234}

最后一个映射按列年份和按布尔索引筛选:

df = df[df['col_1'] >= df['Year'].map(d)]
print (df)
   col_1  Year  a
0   2000  1990  0
2  54353  1992  2

详情:

print (df['Year'].map(d))
0     1234
1     5432
2    54353
3      654
Name: Year, dtype: int64

print (df['col_1'] >= df['Year'].map(d))

0     True
1    False
2     True
3    False
dtype: bool
 类似资料:
  • 我正在尝试根据两个行值筛选出行。我看到的大多数问题的解决方法都采用以下方法: 可能我在这里弄得很混乱,这很简单。无论如何,任何帮助都将不胜感激! 问候

  • 我目前正在用maven 3.1.1和maven war插件2.4建立一个web项目(http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html). 特别是,我正在尝试用maven war插件复制和过滤资源,这种方式我在过去已经做过了,而且很有效。以下是相关pom配置: WAR插件配置 激活的配置文件定义: META-INF/上下文。

  • 我有这个在重复播放 来自网站数组的每个网站对象如下所示: 问题:如何将过滤器应用于上述循环,使其仅显示属性为空数组的元素? 我尝试过的事情: (控制台中没有错误,但会过滤掉所有内容) (与我想要的相反,只显示组不是空数组的项目) (如果我用null代替[]来表示没有值,这是可行的,但看起来真的很混乱……因为我需要经常注意组属性变为空,并手动将其设置为null)

  • 我愿意过滤其中有短信和电话在列中的id,每当等于 预期结果 在这种情况下,只有id 2的登录方法中的电话和短信等于重新发送

  • 若要用单个列过滤数据文件(DF),如果我们考虑有男性和女性的数据,我们可以: 问题1——但如果数据跨越多年,而我只想看到2014年的男性会怎样? 在其他语言中,我可能会这样做: (除非我想这样做并在新的dataframe对象中获取原始dataframe的子集) 问题2。我如何在一个循环中实现这一点,并为每个独特的年份和性别集(即:2013年男性、2013年女性、2014年男性和2014年女性)创建

  • 我有几个表,我希望根据另一个表中是否存在两列来筛选其中一个表中的行。每个表上的数据如下 表2:每个用户哈希与用户ID唯一相关联 表3:每个商品名称与商品编号唯一相关联 表4 在我的示例中,ID2和Number2都在表1中,但不在同一行上,所以我想从表4中筛选此行。 我希望问题足够清楚。提前感谢!