###前提・実現したいこと
Python の pandas groupbyにてデータの集計方法の質問です。groupby でグループ内のある条件を満たす最小値が欲しいです。その際に、条件を満たさないグループの項目も残したいのですが、どのように書くのがpandasのイディオムなのでしょうか?自分の例ではout3では求められましたが冗長な書き方と感じましたので質問しています。out2のような書き方ではできないのでしょうか?
実行したこと
python
1import pandas as pd 2df = pd.DataFrame( 3 {'id': list('aaabbcccc'), 4 'val': [1,2,3,1,2,1,2,4,5]}) 5 6out1 = df[df.val >= 3].groupby('id').count()
実行結果
>>> out1 val id a 3 c 4
欲しい結果(NaNを入れたいので'float64'でOK)
val id a 3.0 b NaN c 4.0
試したこと
>>> out2 = df.groupby('id')[df.val >= 3].min() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Anaconda3\lib\site-packages\pandas\core\base.py", line 337, in __getitem__ % str(bad_keys)[1:-1]) KeyError: 'Columns not found: False, True' >>> out3 = pd.DataFrame(index = df.set_index('id').index.unique()).join(out1) >>> out3 val id a 3.0 b NaN c 4.0
実行環境
>>> import sys; sys.version '3.5.2 |Anaconda custom (64-bit)| (default, Jul 5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]' >>> pd.__version__ '0.19.2'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/18 01:25 編集