我有一个看起来像这样的Pandas数据框:

    col1    col2    col3    col4
0   NaN     D       NaN     I
1   NaN     NaN     F       J
2   NaN     NaN     NaN     NaN
3   A       E       NaN     NaN
4   NaN     NaN     G       NaN
5   NaN     NaN     NaN     K
6   B       NaN     NaN     NaN
7   NaN     NaN     H       NaN
8   NaN     NaN     NaN     NaN
9   C       NaN     NaN     NaN


我希望将行至少保留两个非null条目:

    col1    col2    col3    col4
0   NaN     D       NaN     I
1   NaN     NaN     F       J
3   A       E       NaN     NaN


使用布尔索引来选择所有非空列确实很容易,但是如何将其归纳以保持行数大于等于x的非空条目呢?

这是创建此数据框的代码:

import numpy as np
import pandas as pd

d = {'col1' : [np.nan, np.nan, np.nan, 'A', np.nan, np.nan, 'B', np.nan, np.nan, 'C'],
 'col2' : ['D', np.nan, np.nan, 'E', np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
 'col3' : [np.nan, 'F', np.nan, np.nan, 'G', np.nan, np.nan, 'H', np.nan, np.nan],
 'col4' : ['I', 'J', np.nan, np.nan, np.nan, 'K', np.nan, np.nan, np.nan, np.nan]}

df = pd.DataFrame(d)

最佳答案

各种选择中的好东西

In [20]: df.dropna(thresh=2)
Out[20]:
  col1 col2 col3 col4
0  NaN    D  NaN    I
1  NaN  NaN    F    J
3    A    E  NaN  NaN


这是一个等效的解决方案

df.loc[df.count(axis=1)>=2]

关于python - 根据非空列数从数据框中选择行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25388944/

10-10 12:50