Dropna,当另一行的数据丢失或Na_匹配所有数据的drop_duplicates

问题描述 投票:1回答:1

我有如下数据:

Index  ID    data1  data2 ...
0      123   0      NaN   ...
1      123   0      1     ...
2      456   NaN    0     ...
3      456   NaN    0     ...
...

我需要删除行数少于或等于其他行中可用信息的行。

在上面的示例中,第0行和2 x或3应该被删除。

到目前为止,我最大的尝试是速度较慢,也无法正常工作:

df.groupby(by='ID').fillna(method='ffill',inplace=True).fillna(method='bfill',inplace=True)
df.drop_duplicates(inplace=True)

我如何最好地实现这个目标?

python pandas nan drop-duplicates
1个回答
2
投票

您的方法似乎很好,仅在此处使用就地分配不起作用(因为您正在分配数据的副本),请使用:

df = df.groupby(by='ID', as_index=False).fillna(method='ffill').fillna(method='bfill')

df.drop_duplicates()

   ID   data1  data2
0  123    0.0    1.0
2  456    NaN    0.0
© www.soinside.com 2019 - 2024. All rights reserved.