Python Pandas:根据另一列的值更新行

安德烈·伊托

我有一个熊猫数据框df,例如:

name   | grade | grade_type
---------------------------
sarah  | B     | letter  
alice  | A     | letter
eliza  | C     | letter
beth   | 76    | numeral
jones  | 90    | numeral

中的所有值df都是字符串,包括数字。我想grade根据检查grade_type数值转换为字母,以获得:

name   | grade | grade_type
---------------------------
sarah  | B     | letter  
alice  | A     | letter
eliza  | C     | letter
beth   | B     | numeral
jones  | A     | numeral

为了完整起见,数字到字母的等级转换是:

A: grade > 80
B: 70 < grade <= 80
C: 60 < grade <= 70

为什么不起作用?

for index, row in df.iterrows():
  if row.grade_type == "numeral":
    grade_val = int(row.grade.values[0])
    if grade_val > 80:
      row.grade = "A" # This assignment doesn't update row.grade!
    elif...

替代方法是使用df.apply(...lambda:...),但我不太确定如何实现该目标,因为我们必须grade_type在确定是否更新该grade之前先检查该

umutto

DataFrame不更新的原因是因为iterrows()返回的行是副本。您正在处理该副本。

您可以使用index返回从iterrows和直接操作数据框:

for index, row in df.iterrows():
    grade_val = int(row.grade.values[0])
    if grade_val > 80:
        df.loc[index, 'grade'] = 'A'
    ...

或者如您所说,您可以使用df.apply(),并将自定义函数传递给它:

def get_grades(x):
    if x['grade_type'] == 'letter':
        return(x['grade_val']) 
    if x['grade_val'] > 80:
        return "A"
    ...


df['grade'] = df.apply(lambda x: get_grades(x), axis=1)

您还可以if else在lambda中使用以下方法检查x['grade_type']数字是否为数字,使用看起来更容易阅读的数字。

def get_grades(grade_val):
    if grade_val > 80:
        return "A"
    ...

df['grade'] = df.apply(lambda x: get_grades(x['grade']) 
                       if x['grade_type'] == 'numeral' else x['grade'], axis=1)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

python pandas-根据另一列的内容将列中的值更改为布尔值

根据对多列pandas python的逻辑操作更新另一列

Python Pandas:根据另一列更改条件

根据另一列(Python,Pandas)中的值删除一列的重复项

Pandas / Python:根据另一列中的值设置一列的值

根据另一列pandas python的值在python中添加新列

根据另一列的值更新一列

根据另一列的值更新一列

Python Pandas-根据另一列获取一列的最小值,并将另一列分组

根据Pandas中另一列的值添加新列(python)

根据某一列过滤行,然后检查另一列的值是否在Python的特定列表中

Python Pandas,根据另一列中的值进行日期时间舍入

Python Pandas,根据另一列中的值进行日期时间舍入

Python:Pandas:如何根据Groupby在另一列中查找最大值

使用Python熊猫根据条件将行值复制到另一列

如果另一列包含特定字符串,Python Pandas如何更新列

根据python中的另一列过滤列列表

如何用另一列的数据更新一列的python数据框空白行?

根据另一列中的值更新列

根据另一列的不同值更新一行

Python Pandas:检查一列中的值是否存在于另一列中的行子集中

Python函数根据另一列填充nan值

根据另一列(Python Pandas)的值在列中添加一部分字符串

如何使用python / pandas根据一列中的字符串拆分和复制行?

python pandas数据框根据另一列的条件将列中的文本着色为红色、绿色或黑色

如何根据加速值对一列进行分组并进一步对另一列进行分组并对其进行计数(Pandas Python)

Python:根据另一列的值从一列创建元组

如何根据另一列值Python总结一列

python pandas-将列除以另一列