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

标签 python pandas dataframe pandas-groupby

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

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/

相关文章:

python - Pandas groupby : compute (relative) sizes and save in original dataframe

python - 如何恢复扁平化 Numpy 数组的原始索引?

python - 为什么 df.where() 不替换所有空值?

python - 为什么python在启动时不自动导入每个模块?

python - 求解多个线性稀疏矩阵方程 : "numpy.linalg.solve" vs. "scipy.sparse.linalg.spsolve"

python - 如何在更改列名时正确读取 Pandas 中的 csv

python - 如何在 Pandas 数据框中拆分一列元组?

python - 在 QDialog 中显示子进程的实时输出

python - 值错误转换数组中元素的数据类型

python - 使用列表索引多索引数据帧