後ナンのを除去することにより、データフレーム内の行をマージします:それぞれの場合にのみ1非ナンがあることに注意してください、私は同じ外インデックス(と行をマージしたい次のようなデータフレームを付けGROUPBY
import numpy as np
import pandas as pd
from pandas import DataFrame
idx = pd.MultiIndex.from_product([["Project 1", "Project 2"], range(1,3)],
names=['Project', 'Ord'])
df = DataFrame({'a': ["foo", np.nan, np.nan, "bar"],
'b': [np.nan, "one", "two", np.nan]},
index=idx)
Out:
a b
Project Ord
Project 1 1 foo NaN
2 NaN one
Project 2 1 NaN two
2 bar NaN
を-値)。
私が持っている現在のソリューションは、2 GROUPBY-の操作が含まれます
df.index = df.index.droplevel(1)
df.groupby(df.index).ffill().groupby(df.index).last()
と私の意図した結果得られます。すべて私が必要とするので、
2 GROUPBYオペレーションを使用する必要がOut:
a b
Project
Project 1 foo one
Project 2 bar two
は、過度のようですリストから単一のnon-nan値を返す集約関数です。しかし、私はdropnaを集合関数として使う方法を考えることはできません。