Python 熊猫:无法使用groupby计算大DF上的正确分位数

Python 熊猫:无法使用groupby计算大DF上的正确分位数,python,pandas,Python,Pandas,在大型数据集上使用多列groupby时,我似乎无法重现分布的90%: data.loc[(data.x=='2008Q1')&(data.y==-90)]['var'].quantile(0.9) out: 1.030292 groupby_var = data.groupby(['x','y'])['var'].quantile(0.9).reset_index().rename(columns={'var':'u_var'}) groupby_var.loc[(groupby_var

在大型数据集上使用多列groupby时,我似乎无法重现分布的90%:

data.loc[(data.x=='2008Q1')&(data.y==-90)]['var'].quantile(0.9)
out: 1.030292
groupby_var = data.groupby(['x','y'])['var'].quantile(0.9).reset_index().rename(columns={'var':'u_var'})
groupby_var.loc[(groupby_var.x=='2008Q1')&(groupby_var.y==-90)]['u_var']
out: 0.187166
数据帧数据由6800万行组成。x是字符串/对象,y是浮点,var是浮点。 我做错了什么?结果差得很远

更新:

问题与y的缺失值有关。可复制示例:

import pandas as pd
import random
import numpy as np

random.seed(0)
n=68*10**6
x_data = [str(i)+'Q'+str(j) for i in range(1950,2021) for j in range(1,5)]
y_data = [i for i in range(-90,91)]+[np.nan]
var_data = [random.randrange(0,10000)/10000 for i in range(n)]

data = pd.DataFrame(var_data,columns=['var'])
data['x'] = random.choices(x_data,k=n)
data['y'] = random.choices(y_data,k=n)
data['y'] = data['y'].astype(float)

data.loc[(data.x=='2008Q1')&(data.y==-90)]['var'].quantile(0.9)
out: 0.891
groupby_var = data.groupby(['x','y'])['var'].quantile(0.9).reset_index().rename(columns={'var':'u_var'})
groupby_var.loc[(groupby_var.x=='2008Q1')&(groupby_var.y==-90)]['u_var']
out: 0.8472

groupby_var_nan = data.loc[data['y'].notna()].groupby(['x','y'])['var'].quantile(0.9).reset_index().rename(columns={'var':'u_var'})
groupby_var_nan.loc[(groupby_var_nan.x=='2008Q1')&(groupby_var_nan.y==-90)]['u_var']
out: 0.891
问题:为什么
groupby\u var.loc[(groupby\u var.x='2008Q1')和(groupby\u var.y=-90)]的结果与
data.loc[(data.x='2008Q1')和(data.y=-90)]分位数(0.9
groupby\u var\u-nan loc和
groupby\u var.loc的结果不同

这是预期的行为吗? 这不是某种错误吗