2017-02-28 22 views
3

が含まれている場合、私は、次の例を持っている:私はその列「B」を持ちたいパイソン - パンダ - GROUPBYおよび「AGG」 - NaNに設定集約グループがNaN

index_ = pd.date_range('2001-01-01', '2010-12-31', freq = 'MS') 
df_ = pd.DataFrame(np.random.randn(len(index_), 4), columns=list('ABCD'), index = index_) 
df_.loc['2009-01-01','A'] = np.nan 
df_.loc['2007-08-01','B'] = np.nan 
df_.groupby(pd.TimeGrouper('A')).agg({'A': np.sum, 'B': np.mean}) 

は、2007年にNaNとコラムです'A'は2009年にはNaNです。これはどのように達成できますか?私はnp.sum関数を試しました。なぜなら、numpy配列では配列にnan値が含まれているとNaNを返すからです。これはここで使用したい "agg"コマンドに変換できますか?

答えて

4

あなたがsummeanでパラメータskipna=Falseを使用することができます。

np.random.seed(100) 
index_ = pd.date_range('2001-01-01', '2010-12-31', freq = 'MS') 
df_ = pd.DataFrame(np.random.randn(len(index_), 4), columns=list('ABCD'), index = index_) 
df_.loc['2009-01-01','A'] = np.nan 
df_.loc['2007-08-01','B'] = np.nan 
df = df_.groupby(pd.TimeGrouper('A')).agg({'A': lambda x: x.sum(skipna=False), 
              'B': lambda x: x.mean(skipna=False)}) 
print (df) 
        B   A 
2001-12-31 0.184784 0.593025 
2002-12-31 -0.251913 -1.720891 
2003-12-31 -0.085896 -3.060836 
2004-12-31 -0.327153 6.561670 
2005-12-31 0.214115 3.400988 
2006-12-31 0.270536 2.972164 
2007-12-31  NaN 4.175623 
2008-12-31 0.429060 -2.917714 
2009-12-31 0.222544  NaN 
2010-12-31 -0.339483 2.021474 
関連する問題