いくつかのRビネットからの外出を複製することにより、Pandas
パッケージを学習しています。ここで、例としてRのdplyr
パッケージを使用しています。
http://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html
planes <- group_by(hflights_df, TailNum)
delay <- summarise(planes,
count = n(),
dist = mean(Distance, na.rm = TRUE))
delay <- filter(delay, count > 20, dist < 2000)
planes = hflights.groupby('TailNum')
planes['Distance'].agg({'count' : 'count',
'dist' : 'mean'})
python NA
をスキップする必要があることを明示的に述べるにはどうすればよいですか?
あなたはそれをしないので、それはトリックの質問です。 Pandasは自動的にNaN
の数値を集計関数から除外します。私のdf
について考えてみましょう。
_ b c d e
a
2 2 6 1 3
2 4 8 NaN 7
2 4 4 6 3
3 5 NaN 2 6
4 NaN NaN 4 1
5 6 2 1 8
7 3 2 4 7
9 6 1 NaN 1
9 NaN NaN 9 3
9 3 4 6 1
_
内部のcount()
関数はNaN
値を無視し、mean()
も無視します。 NaN
を取得する唯一のポイントは、唯一の値がNaN
の場合です。次に、空集合の平均値を取得します。これはNaN
であることがわかります。
_In[335]: df.groupby('a').mean()
Out[333]:
b c d e
a
2 3.333333 6.0 3.5 4.333333
3 5.000000 NaN 2.0 6.000000
4 NaN NaN 4.0 1.000000
5 6.000000 2.0 1.0 8.000000
7 3.000000 2.0 4.0 7.000000
9 4.500000 2.5 7.5 1.666667
_
集計関数は同じように機能します。
_In[340]: df.groupby('a')['b'].agg({'foo': np.mean})
Out[338]:
foo
a
2 3.333333
3 5.000000
4 NaN
5 6.000000
7 3.000000
9 4.500000
_
補遺:標準 dataframe.mean API で、NaN
値の包含を制御できることに注意してください。ここでデフォルトはexcludeです。
Foobarが言ったことは、デフォルトでどのように実装されたかに関しては真実ですが、skipnaを指定する非常に簡単な方法があります。これはそれ自体を語る例です:
def custom_mean(df):
return df.mean(skipna=False)
group.agg({"your_col_name_to_be_aggregated":custom_mean})
それでおしまい!独自の集計を好きなようにカスタマイズできます。これはかなり効率的だと思いますが、掘り下げませんでした。
それも議論されました ここ 、しかし私は良いニュースを広めるのを手伝うと思いました!回答は公式で見つかりました doc 。