使用python汇总数据框列中用逗号分隔的单元格中的值

时间:2017-11-15 15:31:29

标签: python python-3.x python-2.7 lambda apply

我有一个数据框列,其数字值以逗号(,)分隔。我试图找到该列的每个单元格中的值的总和并创建一个新列。

输入: 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

1 个答案:

答案 0 :(得分: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