2017-05-19 14 views
1

stack().groupby().nlargest().unstack()チェーンを使用して、Pandas Dataframeの各行で最大のN要素を見つけようとしました。ただし、元のインデックスが重複することがあります。それ以外の時間はありません。この動作の不一致により、後続の処理が非常に困難になります。どのような違いを引き起こすのか、そして一貫性を強制する方法を知っている人はいますか?groupbyとnlargestの後に特別な(重複した)インデックスを作成するパンダ

例えば、ここでインデックス[x y z]が最後に複製されている場合は、次のとおりです。

>>> df = pd.DataFrame({'A':[np.nan,8,9], 'B':[0,np.nan,5], 'C':[2, 10, np.nan]}, index='x y z'.split()) 
>>> df 
    A B  C 
x NaN 0.0 2.0 
y 8.0 NaN 10.0 
z 9.0 5.0 NaN 
>>> df.stack().groupby(level=0).nlargest(1).unstack() 
     A  C 
x x NaN 2.0 
y y NaN 10.0 
z z 9.0 NaN 

この場合にはそれがないのに対し:

>>> df1 = pd.DataFrame({'A':[np.nan,np.nan,9], 'B':[0,np.nan,np.nan], 'C':[np.nan, 10, np.nan]}, index='x y z'.split()) 
>>> df1 
    A B  C 
x NaN 0.0 NaN 
y NaN NaN 10.0 
z 9.0 NaN NaN 
>>> df1.stack().groupby(level=0).nlargest(1).unstack() 
    A B  C 
x NaN 0.0 NaN 
y NaN NaN 10.0 
z 9.0 NaN NaN 

答えて

0

必要なものはPARAMTERあるdropna=False.stack()方法:

df = pd.DataFrame({'A':[np.nan,8,9], 'B':[0,np.nan,5], 'C':[2, 10, np.nan]}, index='x y z'.split()) 
df.stack(dropna=False).groupby(level=0).nlargest(1).unstack() 

出力:

 A  C 
x x NaN 2.0 
y y NaN 10.0 
z z 9.0 NaN 

そして

df1 = pd.DataFrame({'A':[np.nan,np.nan,9], 'B':[0,np.nan,np.nan], 'C':[np.nan, 10, np.nan]}, index='x y z'.split()) 
df1.stack(dropna=False).groupby(level=0).nlargest(1).unstack() 

出力:

 A B  C 
x x NaN 0.0 NaN 
y y NaN NaN 10.0 
z z 9.0 NaN NaN 
関連する問題