【发布时间】:2022-01-21 18:51:36
【问题描述】:
我有以下数据框
import pandas as pd
import numpy as np
df = pd.DataFrame({
"Country": ["A", "A", "A", "A", "B", "B", "B", "B"],
"Year": [2020, 2020, 2021, 2021, 2020, 2020, 2021, 2021],
"Category": [1, 2, 1, 2, 1, 2, 1, 2],
"Count": [np.nan, np.nan, 1, 2, 3, np.nan, 5, 6]
})
我想删除与Country 和Year 列共享值并在Count 列中具有NaN 值的所有值。所以在这种情况下,行 id 0 和 1 将被删除(注意第 5 行不应该被删除)。
这可以通过一些内置的 pandas 函数在不循环的情况下实现吗?
下面的代码达到了预期的效果,但是效率相当低(真实的dataframe要大得多):
for country in df.Country.unique():
for year in df.Year.unique():
if df[(df.Country==country) & (df.Year==year)].Count.isna().all():
df.drop(df[(df.Country==country) & (df.Year==year)].index, inplace=True)
有没有更好、更有效的方法?
【问题讨论】:
标签: python pandas dataframe drop