我正在使用pandas数据帧。从代码:
PendingFileRenameOperations
我有一个带有两个组图层的pandas groupby对象:State和Year。
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager" /v PendingFileRenameOperations >nul
if errorlevel 1 (
echo OK
....proceed with stuff
) else (
echo Restart is required
pause
exit
)
我只想看看那些年来我有数据的州(即NY和DE,而不是NJ,因为它缺少2010年)。有没有办法抑制那些排名低于满级的嵌套组?
答案 0 :(得分:2)
按State
和Year
分组并取平均值后
means = contracts.groupby(['State', 'Year'])['$'].mean()
您可以单独使用State
进行分组,并使用filter
来保留所需的群组:
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()
但是玩各种各样的例子表明这通常比取平均值慢,然后过滤。