【问题标题】:Count list in columns - Pandas列中的计数列表 - 熊猫
【发布时间】:2021-09-22 10:15:32
【问题描述】:

各位 Pytoneers 或 Pythonistas,

我希望我能在这个问题上得到你的帮助:

我有多个 pandas 数据帧,其中包含如下示例:

我想创建一个函数来计算列表中的值,例如[a,b,c] 并遍历列和数据框。我想返回列表中列中找到的项目总数。我写了这段代码,但它似乎没有奏效。能否请你帮忙?预先感谢您的回答。 PS:因为我是新手,所以我的业力很低:D

list_of_dataframes = [k,p,r]

list_of_chars = ["a","b","c"]

for dataframe in list_of_dataframes:
        for values in list_of_chars:
            for columns in dataframe:
                count = 0
                if dataframe.columns.str.contains(list_of_chars):
                    dataframe['Total']=count+1
                else dataframe['Total']

【问题讨论】:

    标签: python pandas string dataframe


    【解决方案1】:

    将字符串列连接在一起,然后按Series.str.count 计算值,并将连接值连接在一起,并用空字符串替换缺失值。因为有一些带有正则表达式字符的列表值,所以必须先通过re.escape 将它们转义:

    在您的解决方案中:

    k = pd.DataFrame({'ID':[1,2, 3], 
                       'String1':['a d d','a','s'],
                       'String2':['a','a b b','c']})
     
    p = pd.DataFrame({'ID':[1,2, 3], 
                       'String1':['c','b','c'],
                       'String2':['a b','a c','d a']})
     
    r = pd.DataFrame({'ID':[1,2, 3], 
                       'String1':['a','c d as','c a d'],
                       'String2':['a b c c','a b c','d a b f']})
     
    list_of_dataframes = [k,p,r]
    

    import re
    
    list_of_chars = ["a","b","c"]
    pat = '|'.join(['({})'.format(re.escape(c)) for c in list_of_chars])
    
    for i, dataframe in enumerate(list_of_dataframes):
        dataframe['Total'] = dataframe.select_dtypes(object).fillna('').agg(''.join, 1).str.count(pat)
        list_of_dataframes[i] = dataframe
         
    print (list_of_dataframes)
    [   ID String1 String2  Total
    0   1   a d d       a      2
    1   2       a   a b b      4
    2   3       s       c      1,    ID String1 String2  Total
    0   1       c     a b      3
    1   2       b     a c      3
    2   3       c     d a      2,    ID String1  String2  Total
    0   1       a  a b c c      5
    1   2  c d as    a b c      5
    2   3   c a d  d a b f      4]
    

    【讨论】:

    • 谢谢你,杰兹瑞尔。我会考虑你的建议:D
    • @Qthry - 你认为missing values 是空白数据吗?
    • @Qthry - 添加了一些示例数据和解决方案正常工作
    • 哈哈,你真快!是的,缺失值是黑色数据。我是新手,有时很难理解,请多多包涵。假设我将所有字符串连接成一列,我不知道在您发布的代码中引用该列的位置。
    • @Qthry - 如果选择所有带有dataframe.select_dtypes(object) 字符串的列,则用.fillna('') 替换缺失值,然后.agg(''.join, 1) 返回带有连接值的新列(系列)。
    猜你喜欢
    • 2019-02-14
    • 1970-01-01
    • 2023-01-17
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多