【问题标题】:Dropping ID of multiindex dataframe if a specific column only includes NaAs for that ID如果特定列仅包含该 ID 的 NaAs,则删除多索引数据帧的 ID
【发布时间】:2020-10-01 02:56:35
【问题描述】:

我有一个类似这样的多索引数据框(但有超过 20k 行和大约 100 列):

         x1  x2  x3
Time ID
1    1   1   2   NaN
2    1   1   2   3
1    2   1   2   NaN
2    2   1   2   NaN

我想删除所有列 x3 仅包含 NaN 的 ID,但保留可能包含 NaN 但也有一些实际值的 ID。对于上面的例子,我想要的输出是:

         x1  x2  x3
Time ID
1    1   1   2   NaN
2    1   1   2   3

【问题讨论】:

    标签: python pandas dataframe nan multi-index


    【解决方案1】:

    你想要anygroupby

    df[df.x3.notnull().groupby('ID').transform('any')]
    

    输出:

             x1  x2   x3
    Time ID             
    1    1    1   2  NaN
    2    1    1   2  3.0
    

    【讨论】:

      【解决方案2】:

      我们可以用isindropna

      df=df.loc[df.index.get_level_values(1).isin(df.dropna().index.get_level_values(1))]
      Out[71]: 
               x1  x2   x3
      Time ID             
      1    1    1   2  NaN
      2    1    1   2  3.0
      

      【讨论】:

      • 谢谢@YOBE_S!但这怎么只考虑 x3 列的值呢?
      猜你喜欢
      • 2018-02-28
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多