更改数据帧中从多个列值中选择的值

2024-05-16 08:24:38 发布

您现在位置:Python中文网/ 问答频道 /正文

所以请原谅我问这个问题的方式不严谨。你知道吗

我正在处理一个问题,在找到符合某些条件的行之后,我很难更改数据帧的值。你知道吗

data = pd.read_csv('students.csv')

The indexes are: StudentId, Tuition, Scholarship, CreditScore, City, Highschool

我只找那些高中成绩=='x',信用评分=='y',然后把他们的奖学金浮动从0.0改为8.5的学生。你知道吗

请注意,有多个学生的奖学金数字为0.0,我试图只更改高中=='x'和CreditScore=='y'的学生的奖学金值。你知道吗

我遇到的问题是,当我找到符合我的条件的行并尝试更改奖学金值时,pandas只会更改看起来是数据帧副本的值。我想更改数据帧的值。你知道吗

我试过:

data[data[([Highschool]=='x') & ([CreditScore]=='y')]]['Scholarship'] = 8.5
data[data[([Highschool]=='x') & ([CreditScore]=='y')]]['Scholarship'].replace(0, 8.5, inplace=True)

但是,在检查data[data[([Highschool]=='x') & ([CreditScore]=='y')]]['Scholarship']之后,“奖学金”的选定结果仍然显示为0.0。你知道吗

有什么更好的方法可以更改符合搜索条件的列的值?你知道吗

谢谢你。你知道吗


Tags: csvthe数据readdata方式条件学生
2条回答
def change_grade(x):
    ...:     if x[0] == 'x' and x[1] == 'y':
    ...:         return x[2] + 8.5
    ...:     else:
    ...:         pass

0是“Highschool”的列索引,1是“CreditScore”的索引,2是“Scholarship”的索引

df['Scholarship'] = df.apply(change_grade, axis = 1)

尽管如此,@piRSquared还是一如既往地提出了一个更加雄辩的单句话。你知道吗

使用loc

data.loc[(data['Highschool']=='x') & (data['CreditScore']=='y'), 'Scholarship'] = 8.5

或同等地

hs = data.Highschool == 'x'
cs = data.CreditScore == 'y'
data.loc[hs & cs, 'Scholarship'] = 8.5

演示

np.random.seed([3,1415])
data = pd.DataFrame(dict(
        Highschool=np.random.choice(('x', 'y', 'z'), 20),
        CreditScore=np.random.choice(('y', 'n'), 20),
        Scholarship=np.zeros(20)
    ))

data.loc[
    (data['Highschool']=='x') & 
    (data['CreditScore']=='y'),
    'Scholarship'] = 8.5

print(data)

   CreditScore Highschool  Scholarship
0            y          x          8.5
1            n          z          0.0
2            n          z          0.0
3            n          z          0.0
4            n          z          0.0
5            y          y          0.0
6            y          y          0.0
7            y          z          0.0
8            y          x          8.5
9            y          z          0.0
10           n          x          0.0
11           n          z          0.0
12           n          x          0.0
13           n          x          0.0
14           n          z          0.0
15           y          x          8.5
16           n          z          0.0
17           n          z          0.0
18           n          x          0.0
19           y          y          0.0

相关问题 更多 >