例
import pandas as pd
import numpy as np
d = {'l': ['left', 'right', 'left', 'right', 'left', 'right'],
'r': ['right', 'left', 'right', 'left', 'right', 'left'],
'v': [-1, 1, -1, 1, -1, np.nan]}
df = pd.DataFrame(d)
通報グループ化データフレームは、私がskipna=False
フラグによって与えられるようにグループ化された和はNaN
になりたいnp.NaN
の値を含む
pd.Series.sum
もpd.DataFrame.sum
しかし、この加算グループ化されたパンダのデータフレーム内の行と戻りのNaN
In [235]: df.v.sum(skipna=False)
Out[235]: nan
しかし、この動作がされますpandas.DataFrame.groupby
オブジェクト
In [237]: df.groupby('l')['v'].sum()['right']
Out[237]: 2.0
に反映されていないと
check_cols = ['v']
df['flag'] = df[check_cols].isnull().any(axis=1)
df.groupby('l')['v', 'flag'].apply(np.sum).apply(
lambda x: x if not x.flag else np.nan,
axis=1
)
が、これをすることによって、私はこの問題を回避することができますnp.sum
方法直接
In [238]: df.groupby('l')['v'].apply(np.sum)['right']
Out[238]: 2.0
回避策
を適用することにより、強制することはできません醜いです。より良い方法はありますか?
複数の列(つまり、DataFrame)に追加すると、メソッドが '.apply(pd.DataFrame.sum、skipna = False)に変更される –