2016-12-15 48 views
1

我有一個數據幀(它是使用旋轉功能,這就是爲什麼它有C的產品和):寫分析列作爲一個整體的.apply函數?

c 367235 419895 992194 
a 
1999-02-06 Nan 9 Nan 
2000-04-03 2 Nan Nan 
1999-04-12 Nan Nan 4 
1999-08-08 2 Nan Nan 
1999-11-01 8 5 1 
1999-12-08 Nan 3 Nan 
1999-08-17 Nan Nan 10 
1999-10-22 Nan 3 Nan 
1999-03-23 Nan 4 Nan 
2000-09-29 9 Nan Nan 
1999-04-30 Nan Nan 1 
2000-09-30 9 Nan Nan 

我想在這個數據框的底部添加一個新行。新行中的每個單元格將評估它上面的列;如果該列包含數字9,8或3,則該單元格將評估爲「TRUE」。如果該列不包含這些數字,則該單元格將評估爲「FALSE」。最終,我的目標是使用下拉功能的「假」細胞刪除列,創建一個數據集,像這樣:

c 367235 419895 
a 
1999-02-06 Nan 9 
2000-04-03 2 Nan 
1999-04-12 Nan Nan 
1999-08-08 2 Nan 
1999-11-01 8 5 
1999-12-08 Nan 3 
1999-08-17 Nan Nan 
1999-10-22 Nan 3 
1999-03-23 Nan 4 
2000-09-29 9 Nan 
1999-04-30 Nan Nan 
2000-09-30 9 Nan 
      TRUE TRUE 

我的問題:

我可以寫,如果的一個評價的函數幾個數字在列表中,但我不能將這個函數寫入.apply。

也就是說,我發現,這適用於確定一組數字是在列表中:

How to check if one of the following items is in a list?

我試圖修改它的應用功能如下:

def BIS(i): 
     L1 = [9,8,3] 
     if i in L1: 
      return "TRUE" 
    else: 
     return "FALSE" 
df_wanted.apply(BIS, axis = 0) 

這將導致一個錯誤: ( 'A系列的真值是模糊使用a.empty,a.bool(),a.item,a.any()。' u'occured在指數367235' )

這使我認爲儘管.apply將整列作爲輸入,但它不能彙總所有單個單元格的真值並得出關於該列的總真值。我查了一下a.any和a.bool,看起來非常有用,但我不知道該把它們粘在哪裏?例如,這並不工作:

df_wanted.apply.any(BIS, axis = 0) 

也沒有這個

df_wanted.apply(BIS.any, axis = 0). 

任何人都可以點我在正確的方向?提前感謝

回答

1

可以使用.isin()方法:

df.loc[:, df.isin(['9','8','3']).any()] 

enter image description here

如果你需要附加條件對數據幀:

cond = df.isin(['9','8','3']).any().rename("cond") 
df.append(cond).loc[:, cond] 

enter image description here

+0

完成的數據集看起來很美 - 只是 我想要的是。邏輯看起來也是正確的,但我仍然對Python非常無知,無法重新創建結果。當我把你的代碼,我得到:「空Dataframe列:[]索引:[1999-02-06 00:00:00,... [長日期列表]。任何想法我錯過了什麼步驟? – oymonk

+0

它是可能在你的原始數據幀中數據類型是數字,嘗試用'[9,8,3]'替換'['9','8','3']' – Psidom

+0

whoohoo它工作了!!!!!非常感謝你@Psidom !!!!! – oymonk

相關問題