Code Sample, a copy-pastable example if possible
# returns 10.125
df = pd.DataFrame({'id': [1, 1], 'val': [0.5, 5.0]})
df.groupby('id').agg({'val': 'var'})
# first edit: 10.125.
df.groupby('id').agg({'val': np.var})
# second edit: 5.0625
df.groupby('id').agg({'val': lambda x: np.var(x)})
# 5.0625
np.var(df.val)
# Returns NaN
df = pd.DataFrame({'id': [1], 'val': [0.5]})
df.groupby('id').agg({'val': 'var'})
Output of pd.show_versions()
'0.22.0'
Comment From: chris-b1
This is working as expected - pandas var
defaults to a ddof of 1.
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.var.html
In [84]: df = pd.DataFrame({'id': [1, 1], 'val': [0.5, 5.0]})
In [85]: np.var(df.val, ddof=1)
Out[85]: 10.125
In [86]: df = pd.DataFrame({'id': [1], 'val': [0.5]})
In [87]: np.var(df.val, ddof=1)
Out[87]: nan