簡體   English   中英

Python Pandas Dataframe將列創建為另一列中出現的字符串數

[英]Python Pandas Dataframe create column as number of occurrence of string in another columns

我有一個數據框,我想計算一個字符串在所有其他列中出現了多少次(例如“是”)。 我想將計數添加到新列中,並將其稱為“是計數”。

我使用lamda和下面的示例進行工作, 基於if-elif-else條件創建新列

我很好奇是否可以一行完成。

這是示例數據和代碼。

import pandas as pd

def finalCount(row):
    count = 0
    if row['Col1'] == 'Yes':
        count = count + 1 
    if row['Col2'] == 'Yes':
        count = count + 1 
    if row['Col3'] == 'Yes':
        count = count + 1
    if row['Col4'] == 'Yes':
        count = count + 1
    return count

data = {
         'Col1': ['Yes', 1, 'No', 'Yes'],
         'Col2': ['Yes', 2, 'No', 'Yes'],
         'Col3': ['No', 3, 'Yes', 'Yes'],
         'Col4': ['Yes', 4, 'No', 'Yes'],
    }
dfData = pd.DataFrame(data, columns= ['Col1','Col2','Col3','Col4'])
dfData['Yes-Count'] = dfData.apply(finalCount, axis =1)

我得到預期的結果。

在此處輸入圖片說明

有沒有一種方法可以擺脫finalCount方法,而只需一行呢?

這是使用布爾掩碼和求和的一種方法:

dfData["Yes-Count"] = dfData.eq('Yes').sum(axis=1)
print(dfData)
#  Col1 Col2 Col3 Col4  Yes-Count
#0  Yes  Yes   No  Yes          3
#1    1    2    3    4          0
#2   No   No  Yes   No          1
#3  Yes  Yes  Yes  Yes          4

說明

  • dfData.eq("Yes")返回具有相等形狀的數據dfData.eq("Yes") ,該布爾值表示該位置的值是否等於"Yes"
  • 跨列求和(軸= 1)
  • 將輸出分配回新列

這是使用isin()函數的另一種方法:

list_of_words = ['Yes']
dfData["Yes-Count"] = dfData.isin(list_of_words).sum(axis='columns')

使用這種方法,您可以將DataFrame元素與多個值進行比較。 DataFrame isin()函數返回一個布爾型DataFrame ,它顯示您的DataFrame元素是否與list_of_words任何單詞匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM