我在 python 中有一个 pandas 数据框,其中行由 p1
标识。 & p2
,但是p2
有时是NaN
:
p1 p2
0 a 1
1 a 2
2 a 3
3 b NaN
4 c 4
5 d NaN
6 d 5
上面的数据帧是使用
从具有许多重复项的较大数据帧返回的df.drop_duplicates(subset=["p1","p2"], keep='last')
这在很大程度上有效,唯一的问题是 NaN
和5
从技术上讲,它们不重复,因此不会被丢弃。
如何删除另一行具有相同 "d", NaN
的行(例如: p1
) 和 p2
not.null
的值例如。 "d", 5
。这里重要的是"b", NaN
被保留,因为没有行包含 "b", not.null
.
最佳答案
我们可以groupby
和ffill
和bfill
,然后drop_duplicates
df.assign(p2=df.groupby('p1')['p2'].apply(lambda x : x.ffill().bfill())).\
drop_duplicates(subset=["p1","p2"], keep='last')
Out[645]:
p1 p2
0 a 1.0
1 a 2.0
2 a 3.0
3 b NaN
4 c 4.0
6 d 5.0
关于python - 如果列为 NaN 并且另一行的列不是 NaN,如何删除 Dataframe 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47405274/