Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫-如何将非数值更新为数值并求和?熊猫_Python_Pandas_Dataframe - Fatal编程技术网

Python 熊猫-如何将非数值更新为数值并求和?熊猫

Python 熊猫-如何将非数值更新为数值并求和?熊猫,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样一个DF: 大学生 年龄 分数 乔 23 A、B、C 做记号 22 B、B、C 伊恩 24 A B A 您可以创建一个等级到编号的地图字典。然后按空格拆分等级列,并使用映射和字典(列表(映射(lambda x:grade_num[x],x))将每个等级转换为数字,并对获得的值求和 grade_num = {'A': 1, 'B': 2, 'C': 3} df['Sum'] = (df['Grades'].str.split(' ') .apply(lambda

我有这样一个DF:

大学生 年龄 分数 乔 23 A、B、C 做记号 22 B、B、C 伊恩 24 A B A
您可以创建一个等级到编号的地图字典。然后按空格拆分
等级
列,并使用
映射
和字典(
列表(映射(lambda x:grade_num[x],x))
将每个等级转换为数字,并对获得的值求和

grade_num = {'A': 1, 'B': 2, 'C': 3}
df['Sum'] = (df['Grades'].str.split(' ')
             .apply(lambda x: np.sum(list(map(lambda x: grade_num[x], x)))))

df

   Student  Age Grades  Sum
0   Joe     23  A B C   6
1   Mark    22  B B C   7
2   Ian     24  A B A   4

您可以创建一个等级到编号的地图字典。然后按空格拆分
等级
列,并使用
映射
和字典(
列表(映射(lambda x:grade_num[x],x))
将每个等级转换为数字,并对获得的值求和

grade_num = {'A': 1, 'B': 2, 'C': 3}
df['Sum'] = (df['Grades'].str.split(' ')
             .apply(lambda x: np.sum(list(map(lambda x: grade_num[x], x)))))

df

   Student  Age Grades  Sum
0   Joe     23  A B C   6
1   Mark    22  B B C   7
2   Ian     24  A B A   4

您可以定义一个函数,在该函数中,将非数值坡度映射为数值坡度

def grades_to_num(grades):
    grades_dict = {"A":1, "B":2, "C":3}
    numgrades = [grades_dict[grade] for grade in grades.split()]
    return sum(numgrades)
然后,您可以将该函数应用于df,以使用数字和创建一个新列

df["Sum"] = df["Grades"].apply(grades_to_num)

您可以定义一个函数,在该函数中,将非数值坡度映射为数值坡度

def grades_to_num(grades):
    grades_dict = {"A":1, "B":2, "C":3}
    numgrades = [grades_dict[grade] for grade in grades.split()]
    return sum(numgrades)
然后,您可以将该函数应用于df,以使用数字和创建一个新列

df["Sum"] = df["Grades"].apply(grades_to_num)

我添加了一个示例,其中我创建了一个dataframe(没有列名),并通过创建dataframe的副本并引入一个新列(3)作为总和来更新值。代码示例仅使用pandas编写

import pandas as pd
grades = {'A': 1, 'B': 2, 'C': 3}
df = pd.DataFrame([['Joe', 23, 'A B C'], ['Mark', 22, 'B B C']])
new_df = df.copy()
new_df[3] = 0

for i, r in new_df.iterrows():
    grade_list = r[2].split(" ")
    s = 0
    for g in grade_list:
        s  += grades[g]
    new_df.loc[i, 3] = s

我添加了一个示例,其中我创建了一个dataframe(没有列名),并通过创建dataframe的副本并引入一个新列(3)作为总和来更新值。代码示例仅使用pandas编写

import pandas as pd
grades = {'A': 1, 'B': 2, 'C': 3}
df = pd.DataFrame([['Joe', 23, 'A B C'], ['Mark', 22, 'B B C']])
new_df = df.copy()
new_df[3] = 0

for i, r in new_df.iterrows():
    grade_list = r[2].split(" ")
    s = 0
    for g in grade_list:
        s  += grades[g]
    new_df.loc[i, 3] = s

谢谢,米切尔,太好了。快速高效,我喜欢该功能,因此在需要类似操作时可以再次使用。您可以使用map并替换数据框中的A、B、C值,然后仅使用数字。谢谢,Mitchel,太好了。快速高效,我喜欢该功能,因此在需要类似操作时可以再次使用。您可以使用map并替换数据框中的A、B、C值,然后仅使用数字。谢谢@ggaurav,我使用了其他解决方案,但您的解决方案非常类似。还不错,效率也很高。谢谢@ggaurav,我选择了另一种解决方案,但您的解决方案非常相似。还不错,效率高。