【问题标题】:Sum up values in a cell separated by comma in a dataframe column using python使用python在数据框列中用逗号分隔单元格中的值求和
【发布时间】:2017-11-15 15:31:28
【问题描述】:

我有一个数据框列,其中的数值由逗号(,)分隔。我正在尝试查找该列的每个单元格中的值的总和并创建一个新列。

输入: df:

       id Scores
       1  10,12
       2  11
       3  1,2,3

需要输出:

      id Scores Sum
      1  10,12   22
      2  11      11 
      3  1,2,3   6

代码:我试过写一个自定义函数,这样我就可以在python中使用apply函数了

def sum_of_number(listx):
    a=[]
    n=0
    if len(listx)==1:
        a=listx
        n=a
    else:
        a=str(listx).split(',')
        for i in range(0,len(a)):
            n=n+int(a[i])
    return n

df['Sum']=df.Scores.apply(sum_of_number)

但我无法获得预期的结果。


编辑: 感谢 DeepSpace 提供解决方案

df['Sum'] = df['Scores'].apply(lambda x: sum(map(float, x.split(','))))

同样可以得到中位数

      id Scores Median
      1  10,12   11
      2  11      11 
      3  1,2,3   2

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以通过组合summapint(或float,根据您的需要)使用更简单的代码:

    import pandas as pd
    
    df = pd.DataFrame({'Scores': ['10,12', '11', '1,2,3']})
    df['Sum'] = df['Scores'].apply(lambda x: sum(map(int, x.split(','))))
    # or df['Sum'] = df['Scores'].apply(lambda x: sum(map(float, x.split(','))))
    print(df)
    
    #    Scores  Sum
    #  0  10,12   22
    #  1  11      11
    #  2  1,2,3    6
    

    以上假设值是字符串。如果这些值是整数的实际列表,那就更容易了:

    import pandas as pd
    
    df = pd.DataFrame({'Scores': [[10, 12], [11], [1, 2, 3]]})
    df['Sum'] = df['Scores'].apply(sum)
    print(df)
    
    #        Scores  Sum
    #  0   [10, 12]   22
    #  1       [11]   11
    #  2  [1, 2, 3]    6
    

    【讨论】:

    • 感谢代码适用于上述情况。但是当我的分数是小数时,它会抛出错误(比如 id 1 为 0.9,0.8;id 2 为 0.2,id 3 为 0.3,0.2,0.5)错误:ValueError:int() 以 10 为底的无效文字:'0.9 '
    • @Sam 所以使用float 而不是int
    • 谢谢它的帮助:)...假设我想计算平均值,中位数。你能建议怎么做吗,因为 sum 是一个全局函数
    • @Sam 我不确定你的意思。如您所见,您可以向apply 提供任何自定义方法。你如何实现它取决于你。你只需要确保你理解你的输入。
    • 我已经用预期的输出更新了问题。
    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 2011-03-18
    • 2020-02-24
    • 2020-04-07
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多