我有一个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()
来获得我想要的东西。
答案 0 :(得分:3)
您可以使用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