2017-10-18 63 views
-3

我已經做了下面的代碼,它的工作正常,但是我試圖做出更具可讀性和優化的代碼,爲此我將我的代碼替換爲列表理解來替換所有「如果條件」尋找emotion_class(雙**)。列表理解多標籤計數器

試圖優化**代碼到列表理解:

emotion_classes = ["Joy", "Fear", "Anger", "Surprise","Sadness", "Trust","Anticipation"] 

[increaseCounterofJoy,increaseCounterofFear, for emotion in emotion_classes] 

代碼

for idx in range(len(df_split)): 

    iter_df = df_split[idx] 

    i = 0 

    final_df = pd.DataFrame(columns=("Date","Joy", "Fear", "Anger", "Surprise","Sadness", "Trust","Anticipation")) 

    for index, row in iter_df.iterrows(): 

     **if iter_df["Emotion Class"] = "Joy": 
      row["Joy"] = +1 
     if iter_df["Emotion Class"] = "Fear": 
      row["Fear"] = +1 
     if iter_df["Emotion Class"] = "Anger": 
      row["Anger"] = +1 
     if iter_df["Emotion Class"] = "Surprise": 
      row["Surprise"] = +1 
     if iter_df["Emotion Class"] = "Sadness": 
      row["Sadness"] = +1 
     if iter_df["Emotion Class"] = "Trust": 
      row["Trust"] = +1 
     if iter_df["Emotion Class"] = "Anticipation": 
      row["Anticipation"] = +1** 

     final_df.loc[i] = row["Date"], row["Joy"], row["Fear"], row["Anger"], row["Surprise"], row["Sadness"], row["Trust"], row["Anticipation"] 

    i = i + 1 
+2

我從來沒有見過像使用了''** ...操作 – bendl

+0

等等,只是強調我們應該看的地方? – bendl

+0

他只是用它來標記一個區域,查看if鏈的最後一行 – scnerd

回答

0

也許是一個數據透視表?

In [1]: iter_df 
Out[1]: 
    Date Emotion Class 
0  1   Joy 
1  1   Peace 
2  2   Joy 
3  3   Peace 
4  3   Peace 

In [2]: iter_df['ones'] = 1 

In [3]: pd.pivot_table(iter_df, index='Date', columns='Emotion Class', values='ones', margins=False, aggfunc='sum') 
    ...: 
Out[3]: 
Emotion Class Joy Peace 
Date 
1    1.0 1.0 
2    1.0 NaN 
3    NaN 2.0 
+0

當沒有指定agg時,pivot_table會給出平均值。我不認爲OP需要數據透視表。 – Dark

+0

謝謝Final_df:所有感情類數+1的情感類都是反例如Joy:10,憤怒:15,悲傷:25 ...像這樣 – Data

+0

我沒有區別......你只是說你想要處理每個日期的重複情緒?代碼處理,我已經更新了答案中的數據以證明這一點。 – scnerd

2

這不是一個任務,其中一個列表理解是非常有用的。只需使用傳統的for循環:

emotion_classes = [ 
    "Joy", "Fear", "Anger", "Surprise", 
    "Sadness", "Trust","Anticipation", 
] 

for index, row in iter_df.iterrows(): 
    for emotion in emotion_classes: 
     if iter_df["Emotion Class"] == emotion: 
      row[emotion] += 1 

您的代碼中有幾個拼寫錯誤。您的測試中有=而不是==。我假設你想增加row中的相應字段,而不是將它們設置爲+1

+0

加上它修復了2個令人討厭的錯別字。 –

1

PM 2Ring的答案的作品,但我想知道,如果你不能簡化它更多:

for index, row in iter_df.iterrows():  
    row[iter_df["Emotion Class"]] += 1 
+0

良好的通話。我想這會工作。我對熊貓不熟悉,但我認爲它可以處理丟失的鍵,例如,如果當前的'iter_df [「Emotion Class」]鍵不存在於'行'中。 –