Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串解析为筛选数据帧的条件_Python_String_Pandas_Operators - Fatal编程技术网

Python 将字符串解析为筛选数据帧的条件

Python 将字符串解析为筛选数据帧的条件,python,string,pandas,operators,Python,String,Pandas,Operators,嗨,我有一个熊猫数据框,我有一个a列 data = pandas.DataFrame() data['A']= [numpy.random.choice([1,2,3,4,5,6]) for i in range(10)] 我想在a上添加一个列B条件(当a=1时,B=0,当a>5时,B=1),而不是使用: data.loc[data['A']==1,'B']=0 data.loc[data['A']>5, 'B']=1 在这里,我想创建一个函数,在给定条件的情况下作为dict来执行此操

嗨,我有一个熊猫数据框,我有一个a列

data = pandas.DataFrame()
data['A']= [numpy.random.choice([1,2,3,4,5,6]) for i in range(10)]
我想在a上添加一个列B条件(当a=1时,B=0,当a>5时,B=1),而不是使用:

data.loc[data['A']==1,'B']=0
data.loc[data['A']>5, 'B']=1
在这里,我想创建一个函数,在给定条件的情况下作为dict来执行此操作:{'a=1':0,'a>5':1},因此我可以使用add_列({'a=1':0,'a>5':1},'B')来执行上面的代码。我觉得和运营商打交道很棘手,有什么好主意吗

def add_column(condition_dict, NewColumnName):
    pass

虽然可能有一些有效的方法,但一种可能的方法是使用
eval
函数

创建输入
df

import pandas as pd
import numpy as np

data = pd.DataFrame()
data['A']= [np.random.choice([1,2,3,4,5,6]) for i in range(10)]
print(data)
   A
0  4
1  3
2  3
3  1
4  1
5  2
6  3
7  6
8  2
9  1
输入
df

import pandas as pd
import numpy as np

data = pd.DataFrame()
data['A']= [np.random.choice([1,2,3,4,5,6]) for i in range(10)]
print(data)
   A
0  4
1  3
2  3
3  1
4  1
5  2
6  3
7  6
8  2
9  1
现在,创建了一个函数,
数据帧
条件_dict
的每一行中迭代
,当
求值匹配时,
存储在相应行的列表中,该列表针对
新列
进行更新。如果所有条件都不匹配,则默认情况下,它将

def add_column(df, condition_dict, NewColumnName):
    new_values = []
    for index, row in df.iterrows():
        # if none of the condition matches then put default value
        default_value = None
        # iterate through each condition to check if any matches
        for key, value in condition_dict.items():
            expression = 'row.' + key
            if(eval(expression)):
                default_value = value
        # add corresponding rows new value for new column        
        new_values.append(default_value)

    df[NewColumnName] = new_values
现在,要调用函数:

add_column(data, {'A==1':0, 'A>5':1}, 'B')
print(data)
输出:

   A    B
0  4  NaN
1  3  NaN
2  3  NaN
3  1  0.0
4  1  0.0
5  2  NaN
6  3  NaN
7  6  1.0
8  2  NaN
9  1  0.0