Skip to main content
 首页 » 编程设计

python之如何计算 python pandas 中的特定单元格值

2025年05月04日1552php

有一个 pandas dataframe 如下:

import pandas as pd 
raw_data = {'name': ['Willard Morris', 'Al Jennings', 'Omar Mullins', 'Spencer McDaniel'], 
'age': [20, 19, 22, 21], 
'favorite_color': ['blue', 'blue', 'yellow', "green"], 
'grade': [88, 92, 95, 70]} 
 
df = pd.DataFrame(raw_data) 

我想将 age 和 grade 数字单元格值除以等于 favorite_color 列中的 blue 到 125.0 值和黄色 值分为 130.0,绿色 分为 135.0。结果必须插入新列 age_new、grade_new。 通过下面的代码我收到错误。

df['age_new'] =(df.loc[df['favorite_color']=='blue']/125.0) 
df['age_new'] =(df.loc[df['favorite_color']=='yellow']/130.0) 
df['age_new'] =(df.loc[df['favorite_color']=='green']/135.0) 
df['grade_new'] =(df.loc[df['favorite_color']=='blue']/125.0) 
df['grade_new'] =(df.loc[df['favorite_color']=='yellow']/130.0) 
df['grade_new'] =(df.loc[df['favorite_color']=='green']/135.0) 

错误:

TypeError: unsupported operand type(s) for /: 'str' and 'int' 

请您参考如下方法:

map

mods = {'blue': 125, 'yellow': 130, 'green': 135} 
 
df.assign( 
    mods=df.favorite_color.map(mods), 
    age_new=lambda d: d.age / d.mods, 
    grade_new=lambda d: d.grade / d.mods 
) 
 
               name  age favorite_color  grade  mods   age_new  grade_new 
0    Willard Morris   20           blue     88   125  0.160000   0.704000 
1       Al Jennings   19           blue     92   125  0.152000   0.736000 
2      Omar Mullins   22         yellow     95   130  0.169231   0.730769 
3  Spencer McDaniel   21          green     70   135  0.155556   0.518519 

类似

mods = {'blue': 125, 'yellow': 130, 'green': 135} 
 
df.join(df[['age', 'grade']].div(df.favorite_color.map(mods), axis=0).add_suffix('_new')) 
 
               name  age favorite_color  grade   age_new  grade_new 
0    Willard Morris   20           blue     88  0.160000   0.704000 
1       Al Jennings   19           blue     92  0.152000   0.736000 
2      Omar Mullins   22         yellow     95  0.169231   0.730769 
3  Spencer McDaniel   21          green     70  0.155556   0.518519