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