gpt4 book ai didi

python - 根据条件创建 Pandas Dataframe 的更好方法

转载 作者:太空宇宙 更新时间:2023-11-04 05:13:25 25 4
gpt4 key购买 nike

我的任务是根据其他 Dataframes 中的条件创建 Dataframes。

我已经用同样的方法做了大约一个星期了,但我很好奇是否有更好的方法。我偶然发现了This Example .现在我知道他使用的示例是根据条件创建一个单独的列,但这让我想知道我的代码是否可以改进。

为了便于使用,这里是链接中代码的简化版本:

import pandas as pd
import numpy as np

raw_data = {'student_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze', 'Jacon', 'Ryaner', 'Sone', 'Sloan', 'Piger', 'Riani', 'Ali'],
'test_score': [76, 88, 84, 67, 53, 96, 64, 91, 77, 73, 52, np.NaN]}
df = pd.DataFrame(raw_data, columns = ['student_name', 'test_score'])

print(df)

grades = []

for row in df['test_score']:
if row > 59:
grades.append('Pass')
else:
grades.append('fail')
df['grades'] = grades
print(df)

student_name test_score grades
0 Miller 76.0 Pass
1 Jacobson 88.0 Pass
2 Ali 84.0 Pass
3 Milner 67.0 Pass
4 Cooze 53.0 fail
5 Jacon 96.0 Pass
6 Ryaner 64.0 Pass
7 Sone 91.0 Pass
8 Sloan 77.0 Pass
9 Piger 73.0 Pass
10 Riani 52.0 fail
11 Ali NaN fail

继续上面的例子,如果我不想做一个“成绩”列,而是想要一个包含所有通过考试的人的数据框。我个人会这样做:

pass_df = df[df['test_score'] > 59]
print(pass_df)

是否有更好的方式来做到这一点?

最佳答案

可以使用 np.where 更好地分配新列.

df['grades'] = np.where(df.test_score > 59, 'Pass', 'fail')

对于测试分数大于 59 的索引,您的方法是标准的,但是如果您打算将结果视为其自己的 DataFrame,您将需要调用 .copy()

演示

>>> df['grades'] = np.where(df.test_score > 59, 'Pass', 'fail')

>>> df
student_name test_score grades
0 Miller 76.0 Pass
1 Jacobson 88.0 Pass
2 Ali 84.0 Pass
3 Milner 67.0 Pass
4 Cooze 53.0 fail
5 Jacon 96.0 Pass
6 Ryaner 64.0 Pass
7 Sone 91.0 Pass
8 Sloan 77.0 Pass
9 Piger 73.0 Pass
10 Riani 52.0 fail
11 Ali NaN fail

关于python - 根据条件创建 Pandas Dataframe 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42421164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com