Python 具有多列的Pandas Groupby选择具有全范围值的行
我正在使用熊猫数据帧。从代码中:Python 具有多列的Pandas Groupby选择具有全范围值的行,python,pandas,Python,Pandas,我正在使用熊猫数据帧。从代码中: contracts.groupby(['State','Year'])['$'].mean() 我有一个pandas groupby对象,它有两个组层:State和Year State / Year / $ NY 2009 5 2010 10 2011 5 2012 15 NJ 2009 2 2012 12 DE 2009 1 2010
contracts.groupby(['State','Year'])['$'].mean()
我有一个pandas groupby对象,它有两个组层:State和Year
State / Year / $
NY 2009 5
2010 10
2011 5
2012 15
NJ 2009 2
2012 12
DE 2009 1
2010 2
2011 3
2012 6
我只想看看那些我拥有所有年份数据的州(即纽约州和德州,而不是新泽西州,因为它缺少2010年的数据)。有没有办法抑制那些低于满秩的嵌套组?在按
状态
和年份
分组并取平均值后
means = contracts.groupby(['State', 'Year'])['$'].mean()
您可以单独按状态
分组,并使用过滤器
保留所需的组:
result = means.groupby(level='State').filter(lambda x: len(x)>=len(years))
比如说,
import numpy as np
import pandas as pd
np.random.seed(2015)
N = 15
states = ['NY','NJ','DE']
years = range(2009, 2013)
contracts = pd.DataFrame({
'State': np.random.choice(states, size=N),
'Year': np.random.choice(years, size=N),
'$': np.random.randint(10, size=N)})
means = contracts.groupby(['State', 'Year'])['$'].mean()
result = means.groupby(level='State').filter(lambda x: len(x)>=len(years))
print(result)
屈服
State Year
DE 2009 8
2010 5
2011 3
2012 6
NY 2009 2
2010 1
2011 5
2012 9
Name: $, dtype: int64
或者,您可以先过滤,然后取平均值:
filtered = contracts.groupby(['State']).filter(lambda x: x['Year'].nunique() >= len(years))
result = filtered.groupby(['State', 'Year'])['$'].mean()
但是使用各种例子表明,这通常比取平均值然后过滤要慢