这两个 Python Pandas 查询有什么区别

数据挖掘 熊猫
2022-03-04 21:52:34

我试图从一些数据中理解,这里是 Pandas 数据框:

In [1]: import pandas as pd                                                                                                                           
In [2]: df = pd.read_csv('c1.csv')                                                                                                                    
In [3]: df.head(2)                                                                                                                                    
Out[3]: 
   year     city        country  avg_temp
0  1849  Abidjan  Côte D'Ivoire     25.58
1  1850  Abidjan  Côte D'Ivoire     25.52

我只想知道年份是否大于 2000 且 avg_temp小于 20,那么 mean() 是什么,我得到 2 个不同的答案:

In [10]: (df.query('year > 2000')['avg_temp'] < 20).mean()                                                                                            
Out[10]: 0.5629877369007804

In [11]: ((df.year > 2000) & (df.avg_temp < 20)).mean()                                                                                               
Out[11]: 0.03540828203222504

In [12]: ((df['year'] > 2000) & (df['avg_temp'] < 20)).mean()                                                                                         
Out[12]: 0.03540828203222504

我不知道哪个是正确的

1个回答

取决于你想要做什么。你试图找到的意思是什么。您的查询返回正确匹配行数除以数​​据集中所有行的平均值。

查询 10:它首先过滤掉数据year > 2000,然后检查过滤后的数据集中包含['avg_temp'] < 20. 因此,如果您的整个数据集有 100 行,那么您过滤的数据集现在将有 10 行。在 avg_temp 条件之后,只有 5 行符合该条件。所以平均值将是 0.5

查询 11 和 12:

它同时在两种条件下过滤原始数据帧。因此,从上面的示例示例中,数据集中的总行数为 100,符合条件的行数仍为 5,因此平均值为 0.05。

所以这取决于你想在这里做什么。