python - 如果列为 NaN 并且另一行的列不是 NaN,如何删除 Dataframe 中的行

标签 python pandas dataframe nan

我在 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')

这在很大程度上有效,唯一的问题是 NaN5从技术上讲,它们不重复,因此不会被丢弃。

如何删除另一行具有相同 "d", NaN 的行(例如: p1 ) p2 not.null 的值例如。 "d", 5 。这里重要的是"b", NaN被保留,因为没有行包含 "b", not.null .

最佳答案

我们可以groupbyffillbfill,然后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/

相关文章:

r - 根据其他列计算列中的总数 - R

python - 将值与列索引 pandas 匹配

python - 根据具有条件的另一列替换数据框列中的值

python - 如何将抓取的内容写入 CSV 文件?

python - mysql-connector-python InterfaceError : Failed getting warnings when executing a query with multiple statements with get_warnings=True

Python:将numpy数组(int)写入二进制文件而不进行填充

python - Pandas :增加日期时间

python - 如何使用pandas.Series.dt.strftime可以做每小时映射?

r - 在 R 数据框中按行查找最大绝对值

python - 给定一个文件,返回一个元组列表,表示 Python 文件中的行