我有一个df:

df = pd.DataFrame([[1, np.nan, "filled", 3], [1, "filled", np.nan, 3], [1, "filled", np.nan, 4]], columns = ["a", "b", "c", "d"])
    a   b   c   d
0   1   NaN filled  3
1   1   filled  NaN 3
2   1   filled  NaN 4


我的最终结果应该是:

df = pd.DataFrame([[1, "filled", "filled", 3], [1, "filled", np.nan, 4]], columns = ["a", "b", "c", "d"])
    a   b   c   d
0   1   filled  filled  3
1   1   filled  NaN 4


所以我想合并在所有方面都相同的行,而不是列b和c。问题在于,除了b和c列外,并不总是会有另一行相同。

想不到如何使用df.groupby(["a", "d"]).apply()获得我想要的东西。

最佳答案

您可以使用groupby + first进行检查,它将选择第一个不是NaN的值作为输出

df.groupby(['a','d'],as_index=False).first()
Out[897]:
   a  d       b       c
0  1  3  filled  filled
1  1  4  filled     NaN

10-07 16:54