Python 通过删除nan';合并数据帧中的行;groupby之后是什么

Python 通过删除nan';合并数据帧中的行;groupby之后是什么,python,pandas,dataframe,nan,Python,Pandas,Dataframe,Nan,给出如下所示的数据帧: 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

给出如下所示的数据帧:

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
我希望合并具有相同外部索引的行(注意,在每种情况下,只有一个非nan值)

我目前的解决方案涉及两个groupby操作:

df.index = df.index.droplevel(1)
df.groupby(df.index).ffill().groupby(df.index).last()
并给出了预期的结果:

Out:
             a    b
Project            
Project 1  foo  one
Project 2  bar  two
必须使用两个groupby操作似乎太过分了,因为我只需要一个聚合函数,从列表中返回单个非nan值。但是,我想不出一种使用dropna作为聚合函数的方法

您可以使用,并且:


groupby
上的
last
方法获取最后一个有效值<在这种情况下,code>first将完成相同的任务

df.groupby(level='Project').last()

df.groupby(level='Project').last()