pandas dataframe可以實現SQL中的count case嗎?

  當我們使用Python進行數據分析時,有時可能需要根據DataFrame其他列中的值向pandas DataFrame添加一列。

  儘管這聽起來很簡單,但是如果我們嘗試使用if-else條件語句來做,可能會變得有些複雜。值得慶幸的是,有一種使用numpy做到這一點的簡單,好方法!

  要學習如何使用它,我們來看一個特定的數據分析問題。我們擁有4,000多個AAA教育推文的數據集。附有圖像的推文會獲得更多的贊和轉發嗎?讓我們做一些分析找出答案!

  我們將從導入pandas和numpy開始,並加載數據集以查看其外觀。

  我們可以看到我們的數據集包含有關每個推文的一些信息,包括:

  1)date —推文發布的日期

  2)time —發推文的時間

  3)tweet -該推文的實際文本

  4)mentions -推文中提及的任何其他Twitter用戶

  5)photos —推文中包含的任何圖像的URL

  6)replies_count -在推文上的回複數量

  7)retweets_count -推文的轉發數

  8)likes_count —在推文上的喜歡次數

  我們還可以看到photos數據的格式有些奇怪。

  使用np.where()添加具有正確/錯誤條件的pandas列

  對於我們的分析,我們只想查看帶有圖像的推文是否獲得更多的交互,因此我們實際上不需要圖像URL。讓我們嘗試創建一個名為的新列hasimage,該列將包含布爾值- True如果該tweet包含圖像,False則不包含圖像。

  為此,我們將使用numpy的內置where()函數。此函數按順序接受三個參數:我們要測試的條件,條件為true時分配給新列的值以及條件為false時分配給新列的值。看起來像這樣:

  在我們的數據中,我們可以看到沒有圖像的推文始終[]在該photos列中具有值。我們可以使用信息並np.where()創建新列hasimage,如下所示:

  在上方,我們可以看到我們的新列已添加到我們的數據集,並且已正確標記了tweet,其中包括圖像為True,其他圖像為False。

  現在我們有了hasimage專欄,讓我們快速製作幾個新的DataFrame,一個用於所有圖像推文,一個用於所有無圖像推文。我們將使用布爾過濾器進行此操作:

  現在,我們已經創建了那些,我們可以使用內置的數學函數.mean()來快速比較每個DataFrame中的推文。

  我們將使用print()語句使結果更易於閱讀。我們還需要記住使用str()來將.mean()計算結果轉換為字符串,以便可以在我們的打印語句中使用它:

  根據這些結果,似乎包括圖像可能會促進AAA教育的更多社群媒體的交互。有圖片的推文的平均贊和轉發次數是沒有圖片的推文的三倍。

  添加條件更複雜的pandas專欄

  這種方法效果很好,但是如果我們想添加一個條件更複雜的新列(超出True和False的條件)怎麼辦?

  例如,為了更深入地研究這個問題,我們可能要創建一些交互性“層”,並評估到達每個層的推文所佔的百分比。為了簡單起見,讓我們使用Likes來衡量交互性,並將tweet分為四個層次:

  1)tier_4 -2個或更少的喜歡

  2)tier_3 — 3-9個贊

  3)tier_2 — 10-15個贊

  4)tier_1 — 16個贊

  為此,我們可以使用稱為的函數np.select()。我們給它兩個參數:一個條件列表,以及一個我們想要分配給新列中每一行的值的對應列表。

  這意味着順序很重要:如果conditions滿足列表中的第一個條件,則列表中的第一個值values將分配給該行的新列。大數據分析使用numpy在pandas dataframe上添加列https://www.aaa-cg.com.cn/data/2376.html如果滿足第二個條件,則將分配第二個值,等等。

  讓我們看一下它在Python代碼中的外觀:


  太棒了!我們創建了另一個新列,該列根據我們的(雖然有些武斷)層排名系統對每個tweet進行了分類。

  現在,我們可以使用它來回答有關我們的數據集的更多問題。例如:1級和4級推文中有多少百分比具有圖像?

  在這裏,我們可以看到儘管圖像似乎有所幫助,但它們似乎並不是成功所必需的。

  儘管這是一個非常膚淺的分析,但我們已經在這裏實現了我們的真正目標:根據有關現有列中值的條件語句向pandas DataFrames添加列。

  當然,這是可以以多種方式完成的任務。np.where()而np.select()只是許多潛在的兩種方法。

https://www.toutiao.com/i6846264263237960204/