筛选出NaN值在熊猫中的一列的组

时间:2020-04-23 09:10:33

标签: python-3.x pandas dataframe

给出如下数据框:

  city district  year  price
0   bj       cy  2018    NaN
1   bj       cy  2019    6.0
2   sh       hp  2018    4.0
3   sh       hp  2019    3.0
4   bj       hd  2018    7.0
5   bj       hd  2019    NaN

如果citydistrict,如何对priceNaN进行分组,并过滤​​行?谢谢。

我需要的输出是这样的:

  city district  year  price
0   bj       cy  2018    NaN
1   bj       cy  2019    6.0
2   bj       hd  2018    7.0
3   bj       hd  2019    NaN

我尝试过使用df.groupby(['city', 'district']).filter(lambda df: df[df['price'].isnull()]),但是它不起作用。

1 个答案:

答案 0 :(得分:2)

GroupBy.transform用于测试是否至少有一个NaN,即每组一个True

mask = (df.assign(test = df['price'].isnull())
          .groupby(['city', 'district'])['test']
          .transform('any'))
df = df[mask]

print (df)
  city district  year  price
0   bj       cy  2018    NaN
1   bj       cy  2019    6.0
4   bj       hd  2018    7.0
5   bj       hd  2019    NaN

如果性能不重要或可能使用较小的DataFrame,请使用DataFrameGroupBy.filter

df = df.groupby(['city','district']).filter(lambda x: x['price'].isnull().any())