【问题标题】:Preserve group columns/index after applying fillna/ffill/bfill in pandas在 pandas 中应用 fillna/ffill/bfill 后保留组列/索引
【发布时间】:2021-12-11 01:34:08
【问题描述】:

我有如下数据,新的pandas版本不保留fillna/ffill/bfill操作后的分组列。有没有办法获得分组数据?

data = """one;two;three
1;1;10
1;1;nan
1;1;nan
1;2;nan
1;2;20
1;2;nan
1;3;nan
1;3;nan"""

df = pd.read_csv(io.StringIO(data), sep=";")
print(df)
   one  two  three
0    1    1   10.0
1    1    1    NaN
2    1    1    NaN
3    1    2    NaN
4    1    2   20.0
5    1    2    NaN
6    1    3    NaN
7    1    3    NaN

print(df.groupby(['one','two']).ffill())
   three
0   10.0
1   10.0
2   10.0
3    NaN
4   20.0
5   20.0
6    NaN
7    NaN

【问题讨论】:

    标签: python pandas dataframe group-by pandas-groupby


    【解决方案1】:

    使用最新的pandas,如果我们想保留groupby 列,我们需要在此处添加apply

    out = df.groupby(['one','two']).apply(lambda x : x.ffill())
    Out[219]: 
       one  two  three
    0    1    1   10.0
    1    1    1   10.0
    2    1    1   10.0
    3    1    2    NaN
    4    1    2   20.0
    5    1    2   20.0
    6    1    3    NaN
    7    1    3    NaN
    

    【讨论】:

      【解决方案2】:

      这是你所期望的吗?

      df['three']= df.groupby(['one','two'])['three'].ffill()
      print(df)
      
      # Output:
         one  two  three
      0    1    1   10.0
      1    1    1   10.0
      2    1    1   10.0
      3    1    2    NaN
      4    1    2   20.0
      5    1    2   20.0
      6    1    3    NaN
      7    1    3    NaN
      

      【讨论】:

        【解决方案3】:

        是的,请设置索引,然后尝试对其进行分组,以便保留列,如下所示:

        df = pd.read_csv(io.StringIO(data), sep=";")
        df.set_index(['one','two'], inplace=True)
        df.groupby(['one','two']).ffill()
        

        【讨论】:

          猜你喜欢
          • 2022-10-24
          • 2019-01-07
          • 2022-07-27
          • 2020-05-17
          • 2023-01-31
          • 1970-01-01
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多