2017-10-14 73 views
0

免責聲明:我的代碼非常業餘,因爲我仍在進行課程工作。如果我的代碼效率低下或質量不好,請耐心等待。簡化大熊貓數據框中布爾列的追加

我一直在最近的Python教程中學習熊貓的力量,並將它應用於我的一些課程作業。我們已經學會了如何在Pandas上使用布爾過濾器,所以我決定更進一步,嘗試將布爾值附加到我的數據(效率)列中。

導師說我們應該專注於盡量減少代碼 - 我已經試圖爲下面的效率列這樣做。 基準效率值爲0.4805(48.05%)。如果數值高於此值,則可以接受。如果低於這個值,這是一個'失敗'。

我曾嘗試使用下面的代碼附加這個我數據幀:

df['Classification'] = (df[['Efficiency_%']].sum(axis=1) > 0.4805) 
df['Classification'] = (df['Classification'] == True).astype(int) 

雖然這只是2行代碼 - 有什麼辦法,我可以進一步簡化爲只有一條線路呢?

我曾考慮過使用'lambda'函數,我正在閱讀。我有興趣是否有其他可供選擇的選擇。

我的我已經試過的方法已經:

  1. For循環 - 建議不要使用此,由於它是低效率的。
  2. If語句 - 我無法得到這個工作,因爲我不能在df ['Classification']列中追加'1'或'0',因爲它是一個數據框而不是一個系列。

    if i > 0.4805: 
    df['Classification'].append('0') else: 
    df['Classification'].append('1')if test 
    

謝謝。

回答

1

這應該這樣做;沒有必要逐行總計一列數據,df[['Efficiency_%']].sum(axis=1)df['Efficiency_%']相同,並且也是布爾系列== True不是必需的,因爲它與布爾系列本身的結果相同。

df['Classification'] = (df['Efficiency_%'] > 0.4805).astype(int) 
+0

謝謝!這比我想象的要簡單得多。如果你不介意,你能否詳細說明我的問題中的「IF」聲明部分?實際上是否可以通過IF方法將值附加到數據框? – azurekirby

+1

您不能將標量值附加到Series,如果您想採用for循環方法,請創建一個列表,將「0」和「1」附加到列表中,然後將該列表作爲列分配給數據幀:像'lst = [];對於我在DF ['Efficiency_%']:如果我> 0.4805:lst.append(1)else:lst.append(0); df ['Classification'] = lst'。 – Psidom

+1

非常感謝Psidom!我會在筆記中寫下這些,因爲這是非常有用的方法。 – azurekirby