我有一个数据框列,其数字值以逗号(,)分隔。我试图找到该列的每个单元格中的值的总和并创建一个新列。
输入: 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
答案 0 :(得分:1)
根据您的需要,您可以结合使用sum
,map
和int
(或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