gpt4 book ai didi

python - 如何最有效地访问 pandas 中的数据

转载 作者:行者123 更新时间:2023-12-02 00:08:47 25 4
gpt4 key购买 nike

我有一个针对不同专业的学生大学申请的小型测试数据集看起来像这样

0   35377       female  Chemistry   False
1 56105 male Physics True
2 31441 female Chemistry False
3 51765 male Physics True
4 53714 female Physics True

形状为 500,4

我需要获得女性的录取率,现在用三种不同的方式解决了这个问题。他们每个人都返回正确的结果。

完成

使用分组依据

female_admitted_rate = df.groupby('gender').get_group('female')[df['admitted'] == True].count()/len(df.groupby('gender').get_group('female'))```

```python
[OUT]
student_id 0.287938
gender 0.287938
major 0.287938
admitted 0.287938
dtype: float64

使用普通的 pandas

len(df[(df['gender']=='female') & (df['admitted'])])/(len(df[df['gender']=='female']))

[Out] 0.28793774319066145

使用查询

len(df.query("gender == 'female' & admitted"))/len(df.query("gender == 'female'"))

[Out] 0.28793774319066145

问题

  • 您将使用什么来获取此信息?
  • 有什么特别的吗所示方法之一的优点?
  • 有没有一种方法你们觉得什么完全没有意义?
  • 是否有特定的使用以上三种之一可以提高计算性能当涉及到大数据集时还有其他人吗?

最佳答案

我想你只需要DataFrame.loc[] + Series.mean() :

df.loc[df['gender'].eq('female'), 'admitted'].mean()

TrueSeries.mean 解释为 1False 被解释为 0 >

您可以使用timeit进行检查

%%timeit
df.loc[df['gender'].eq('female'), 'admitted'].mean()
1.16 ms ± 66.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%%timeit
len(df[(df['gender']=='female') & (df['admitted'])])/(len(df[df['gender']=='female']))
3.45 ms ± 428 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%%timeit
df.groupby('gender').get_group('female')[df['admitted'] == True].count()/len(df.groupby('gender').get_group('female'))
10.3 ms ± 718 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%%timeit
len(df.query("gender == 'female' & admitted"))/len(df.query("gender == 'female'"))
11.1 ms ± 604 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

这些时间适用于示例DataFrame,我认为性能可能会因DataFrame形状而有很大差异。尽管我真诚地相信,除了提供干净简单的语法之外,我提出的方法在大多数情况下都是最快的。

关于python - 如何最有效地访问 pandas 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61029911/

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