2016-03-05 62 views
-1

我有一個巨大的數據框與大量的日期。我想將一個帶有多個參數的函數應用到一組這些列中,以便在這個數據框中創建一個新的參數。函數多參數數據框Python

我具備的功能就是下面(它工作正常):

def func(*args): 
count=0 
for i in args: 
    if i=="Cool": 
     count+=1 
return count 

我創造我的數據框應用該功能的新列一組列:

dates=["2000","2001","2002","2003","2004","2005","2006","2007","2009",] 
df["new_Column"]=df.apply(lambda row : func(row[date] for date in dates), axis = 1) 

然而,執行後,我的new_Column總是等於零。問題來自最後一行。有任何想法嗎?

+0

願你提供你的原始數據幀的樣本的工作,和預期的輸出? –

+0

首先這些是年,而不是日期,所以我會注意你的變量的命名,特別是如果後面可能有實際日期與這些年相比。其次,字符串是指定數據幀索引的字符串,也就是說,df [「2000」]是否爲您提供了數據框記錄?給出您的數據框的示例片段,包括索引,我們可以開始幫助您。 – chryss

+0

如果你能解釋你將通過該功能實現什麼功能,它會更容易幫助你。你想在「new_Column」列中看到什麼? – MaxU

回答

0

這是因爲您僅將生成器對象作爲參數傳遞給func。由於發電機對象不是'Cool',因此得到0

正如其他人發現你的問題不完整。但據我可以預見你有數據幀,看起來像這樣

import pandas as pd 
df = pd.DataFrame({'2000': ['Cool', 'yay', 'nope'], '2001': ['ugly', 'cool', 'nice']}) 

所以,你可以重寫你的func

def func(lst): 
    count=0 
    for i in lst: 
     if i=="Cool": 
      count+=1 
    return count 

而且隨着list構造函數創建新的列

df["new_Column"]=df.apply(lambda row : func(list(row[date] for date in ['2000', '2001'])), axis = 1) 

和接收

2000 2001 new_Column 
0 Cool ugly 1 
1 yay  cool 0 
2 nope nice 0 

如果是這樣的話有純粹的大熊貓解決

df['new_Column2']=df[df.isin(['Cool'])].count(axis=1)