Python 将字符串解析为筛选数据帧的条件
嗨,我有一个熊猫数据框,我有一个a列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来执行此操
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