2017-07-05 43 views
2

您好我有一個數據幀熊貓,我有一個塔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 

在這裏,我想創建一個函數來執行此給出的條件作爲一個字典:{ 'A = 1':0,'A> 5':1}所以我可以使用add_column({'A = 1':0,'A> 5':1},'B')來完成上面的代碼。我認爲與操作員打交道是件棘手的事情,有什麼好主意?

def add_column(condition_dict, NewColumnName): 
    pass 

回答

1

雖然可能有有效的方法來做到這一點,一個可能的辦法可能是使用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) 

輸入df

A 
0 4 
1 3 
2 3 
3 1 
4 1 
5 2 
6 3 
7 6 
8 2 
9 1 

現在,一個功能被創建爲使得其iterates通過dataframecondition_dict並且當row評價匹配value各行被存儲在列表中爲new column更新相應的行。如果沒有條件的默認,然後匹配它會None

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