首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在dataframe上设置一个可变数目的条件?

如何在dataframe上设置一个可变数目的条件?
EN

Stack Overflow用户
提问于 2019-12-26 10:00:13
回答 3查看 157关注 0票数 1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from itertools import product
import pandas as pd

animals = ["dogs", "cats"]
eyes = ['brown', 'blue', 'green']
height = ['short', 'average', 'tall']
a = [animals, eyes, height]
df = pd.DataFrame(list(product(*a)), columns=["animals", "eyes", "height"])
df['value'] = 1

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   animals   eyes   height  value
0     dogs  brown    short      1
1     dogs  brown  average      1
2     dogs  brown     tall      1
3     dogs   blue    short      1
4     dogs   blue  average      1
5     dogs   blue     tall      1
6     dogs  green    short      1

问题:如何创建一个函数,使一个或多个行中的零“值”给定一个或多个条件?

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# This would change all the 1s into 0s for all dogs with blue eyes.
zero_out(df, [("animals", "dogs"), ("eyes", "blue")])

# This would change all the 1s into 0s for all tall animals.
zero_out(df, [("height", "tall")])

到目前为止,我的尝试是:我尝试用*解包来完成这个任务,但是没有成功,因为我不知道如何使用未打包的变量设置多个条件。如果我硬编码条件的数量,很容易设置多个条件.df[(condition1) & (condition2) & (condition3)] = 0

此外,也许这超出了问题的范围,我如何使用*解包装(或者不对if语句中的条件数进行硬编码)来设置给定常规if语句的可变条件数?

例如。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if a > 0 and b > 4
#Or...
if a > 0 and b > 4 and c < 2

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-26 10:24:51

如果我正确地理解了您,您正在寻找.query()方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
from itertools import product

animals = ["dogs", "cats"]
eyes = ['brown', 'blue', 'green']
height = ['short', 'average', 'tall']
a = [animals, eyes, height]
df = pd.DataFrame(list(product(*a)), columns=["animals", "eyes", "height"])
df['value'] = 1


def zero_out(df, lst):
    q = ' & '.join( '{} == "{}"'.format(col, val) for col, val in lst )
    df.loc[df.query(q).index, 'value'] = 0

zero_out(df, [("height", "tall")])
print(df)

指纹:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   animals   eyes   height  value
0     dogs  brown    short      1
1     dogs  brown  average      1
2     dogs  brown     tall      0
3     dogs   blue    short      1
4     dogs   blue  average      1
5     dogs   blue     tall      0
6     dogs  green    short      1
7     dogs  green  average      1
8     dogs  green     tall      0
9     cats  brown    short      1
10    cats  brown  average      1
11    cats  brown     tall      0
12    cats   blue    short      1
13    cats   blue  average      1
14    cats   blue     tall      0
15    cats  green    short      1
16    cats  green  average      1
17    cats  green     tall      0

zero_out(df, [("animals", "dogs"), ("eyes", "blue")])

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   animals   eyes   height  value
0     dogs  brown    short      1
1     dogs  brown  average      1
2     dogs  brown     tall      1
3     dogs   blue    short      0
4     dogs   blue  average      0
5     dogs   blue     tall      0
6     dogs  green    short      1
7     dogs  green  average      1
8     dogs  green     tall      1
9     cats  brown    short      1
10    cats  brown  average      1
11    cats  brown     tall      1
12    cats   blue    short      1
13    cats   blue  average      1
14    cats   blue     tall      1
15    cats  green    short      1
16    cats  green  average      1
17    cats  green     tall      1
票数 3
EN

Stack Overflow用户

发布于 2019-12-26 10:36:25

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def zero_out(df, list_of_filters, out_column='value'):
    conds = np.ones(df.shape[0], dtype=bool)
    for col_name, val in list_of_filters:
        cond = df[col_name].eq(val)
        conds &= cond
    df.loc[conds, out_column] = 0
    return df

你也可以用这个。它比Andrej的方法更通用,因为它不假定过滤器值是字符串。

票数 2
EN

Stack Overflow用户

发布于 2019-12-26 10:37:22

你可以试试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def zero_out(df, *args):
    df_temp = df.copy()
    for arg in args:
        df_temp = df_temp[df_temp[arg[0]] == arg[1]].copy()
    df.iloc[df_temp.index, -1] = 0
    return df

zero_out(df, ("animals", "dogs"), ("eyes", "blue"))

结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   animals   eyes   height  value
0     dogs  brown    short      0
1     dogs  brown  average      0
2     dogs  brown     tall      0
3     dogs   blue    short      0
4     dogs   blue  average      0
5     dogs   blue     tall      0
6     dogs  green    short      0
7     dogs  green  average      0
8     dogs  green     tall      0
9     cats  brown    short      1
10    cats  brown  average      1
11    cats  brown     tall      1
12    cats   blue    short      0
13    cats   blue  average      0
14    cats   blue     tall      0
15    cats  green    short      1
16    cats  green  average      1
17    cats  green     tall      1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59491847

复制
相关文章
AS3中的位操作
在AS3中位操作是非常快的,这里列出一些可以加快某些计算速度的代码片段集合。我不会解释什么是位运算符,也不会解释怎么使用他们,只能告诉大家如果想清楚其中的原理先认真学一下2进制.
py3study
2020/01/06
4160
AS3中的单件(Singleton)模式
单件(singleton)模式在c#中是最容易实现的模式,其主要用意就在于限制使用者用new来创建多个实例。但在as3中,构造函数必须是public的(语法本身要求的),而且也不能在构造函数中抛出异常(编译可通过,但是逻辑行不通),因为这样相当于把创建实例的路子完全切断了,一个实例也得不到! 错误代码: package{ public class singleton{ static private var _instance:singleton; public function sin
菩提树下的杨过
2018/01/23
7880
AS3中mouseEnabled和mou
mouseEnabled mouseEnabled 属性 mouseEnabled:Boolean 语言版本: ActionScript 3.0 运行时版本: AIR 1.0, Flash Player 9, Flash Lite 4 指定此对象是否接收鼠标或其他用户输入、消息。默认值为 true,这表示默认情况下,显示列表上的任何 InteractiveObject 实例都会接收鼠标事件或其他用户输入事件。如果将 mouseEnabled 设置为 false,则实例将不接收任何鼠标事件(或其他用户输入
py3study
2020/01/07
6980
as3中ProgressEvent的bytesTotal始终为0
遇到很奇怪的问题,as3中监听资源下载的PROGRESS事件(ProgressEvent.PROGRESS),它的bytesLoaded属性倒是正常的,但bytesTotal属性却始终为0,结果是导致了得到的下载比率为无穷大(Infinity)
meteoric
2018/11/15
8960
关于AS3中Vector的sort排序
调用 $back.sort(sortRank);  注 : $back 是 vector.<RankPlayerModel>类型的
py3study
2020/01/08
4100
hdu1063
#include<iostream> #include<string> using namespace std; struct BigReal //高精度实数 { int len; //长度 int num[10000]; int point; //小数点位置 BigReal() { len=1; point=0; m
@坤的
2018/06/04
3120
as3中颜色矩阵滤镜ColorMatrixFilter的使用
上面的例子,也是游戏开发中比较常用的功能,与“怪物”战斗后,将其“灰”掉。这其中最重要的还是对AS3颜色矩阵滤镜(ColorMatrixFilter)的使用。
meteoric
2018/11/16
1.4K0
1063 计算谱半径 (20 分)
1063 计算谱半径 (20 分) 【我的代码】 #include <iostream> #include <math.h> using namespace std; int main(){
可爱见见
2019/10/30
3920
1063 计算谱半径 (20 分)
P1063 能量项链
题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为m,尾标记为r,后一颗能量珠的头标记为r,尾标记为n,则聚合后释放的能量为 (Mars单位),新产生的珠子的头标记为m,尾标记为n
attack
2018/04/12
8820
AS3的splice
当第一个元素为-1时,竟然删除了集合的最后的元素,实在是...倒数删除,倒数第一个元素的Index = -1 , 倒数第二个为 -2 , 依次类推,并非不删除元素.
py3study
2020/01/10
6440
AS3!INT
一般 !class 表示 class为null || class 为underfined
py3study
2020/01/10
5970
AS3初探
2. 导入所需要的包(如果无法使用fl包,请参照我的前一篇文章:flex3 里如何导入FLASH CS3的包)
py3study
2020/01/09
6120
AS3反射
当然,像MovieClip,Sprite等除了 使用 new , 还可以用反射 来使它们实例化.
py3study
2020/01/09
6210
AS3反射
AS3 unicode
package com.game.common { import flash.utils.ByteArray; import flash.utils.Endian; /**  * Unicode字符工具  * @author Kayer  * */ public final class GameUnicodeTools { private static var ins : GameUnicodeTools; public static function get instance
py3study
2020/01/10
7510
ActionScript3.0(AS3)中的泛型数组Vector
Adobe官方并没有"泛型数组"的叫法,这是我自己对Vector的叫法(有点标题党),不过Vector在使用上确实跟c#中的泛型数组有些相似之处。 我们知道:ActionScript3.0中的Array数组可以存放多种类型,甚至在同一个Array数组中,可以同时存入String,Object,Number...,但其实我们在实际开发中,通常一个数组中所保存的元素类型都是一致的,为了改进这种情况下的效率,AS3.0新增了一个Vector类。 它强制要求数组中的每个元素都必须是同样的类型,从而省去了“装箱”、“
菩提树下的杨过
2018/01/19
9300
AS3的getBounds方法
1,这个getBound 在某些情况下非常实用.例如,聊天系统的聊天面板.做个这玩意的朋友,应该对着玩意都点熟悉.
py3study
2020/01/10
5790
as3的InteractivePNG例子
在as3中很多时候需要只能选中png中可视区域,即透明区域“感觉可以穿透”。两张png重叠的时候,鼠标可以分别响应它们的事件。如下图所示:
meteoric
2018/11/15
5490
as3 模拟“抛”的动作
以一个小球为示例,在鼠标点击的时修改它的加速度值(在短时间内移动的距离),加速度以一个值加速,在遇到边界时进行反向。
meteoric
2018/11/15
4000
1063. 计算谱半径(20)
在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界。换言之,对于给定的n个复数空间的特征值{a1+b1i, …, an+bni},它们的模为实部与虚部的平方和的开方,而“谱半径”就是最大模。
AI那点小事
2020/04/20
6220
1063. 计算谱半径(20)
1063 计算谱半径 (20 分)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
韩旭051
2019/11/08
6440

相似问题

错误#1063:参数计数不匹配- AS3

11

as3 :错误#1063 MethodInfo-165()参数不匹配

27

Flash错误#1063参数计数与AS3不匹配

219

AS3错误1063 -(表面上)正确的参数数

14

计时器出现as3错误1063

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文