代码之家  ›  专栏  ›  技术社区  ›  yatu Sayali Sonawane

PAD数据帧不连续列

  •  1
  • yatu Sayali Sonawane  · 技术社区  · 6 年前

       Name   B  C  D  E
    1   A     1  2  2  7
    2   A     7  1  1  7
    3   B     1  1  3  4
    4   B     2  1  3  4
    5   B     3  1  3  4
    

       Name   B  C  D  E
    1   A     1  2  2  7
    2   A     2  0  0  0
    3   A     3  0  0  0
    4   A     4  0  0  0
    5   A     5  0  0  0
    6   A     6  0  0  0
    7   A     7  0  0  0
    8   B     1  1  3  4
    9   B     2  1  5  4
    10  B     3  4  3  6
    

    到目前为止,我所做的是将相同“名称”的b列值转换为连续值:

     new_idx = df_.groupby('Name').apply(lambda x: np.arange(x.index.min(), x.index.max() + 1)).apply(pd.Series).stack()
    

    并使用这个新系列重新索引原始(将b设置为索引)df,但使用重复项重新索引时遇到问题。任何帮助都将不胜感激。

    1 回复  |  直到 6 年前
        1
  •  1
  •   jezrael    6 年前

    def f(x):
        a = np.arange(x.index.min(), x.index.max() + 1)
        x = x.reindex(a, fill_value=0)
        return (x)
    
    new_idx = (df.set_index('B')
                .groupby('Name')
                .apply(f)
                .drop('Name', 1)
                .reset_index()
                .reindex(columns=df.columns))
    print (new_idx)
      Name  B  C  D  E
    0    A  1  2  2  7
    1    A  2  0  0  0
    2    A  3  0  0  0
    3    A  4  0  0  0
    4    A  5  0  0  0
    5    A  6  0  0  0
    6    A  7  1  1  7
    7    B  1  1  3  4
    8    B  2  1  3  4
    9    B  3  1  3  4