【问题标题】:Pandas duplicating row if condition met, and assigning value如果条件满足,熊猫复制行并赋值
【发布时间】:2021-06-29 10:55:37
【问题描述】:

我有一个如下所示的 Pandas 数据框,其中 A 列 是一系列字符串值,B 列 保持运行总次数A列中的值与上一行A列的值不同。

A    B       
1    1          
1    1             
1b   2          
1b   2                
1b   2    
1    3   

每次 A 列的值发生变化时,我想复制前一行并为其分配 B 列的递增值。例如,使用上述输入数据框,输出将如下所示:

A    B       
1    1          
1    1   
1    2            
1b   2          
1b   2                
1b   2 
1b   3    
1    3   

关于如何以有效的方式解决这个问题有什么想法吗?

【问题讨论】:

    标签: python pandas numpy shift


    【解决方案1】:

    B 过滤最后重复的值,然后仅移动B 并分配回,按concat 删除最后一行和最后一个连接,并按索引排序:

    df1 = (df[df['B'].ne(df['B'].shift(-1))]
             .assign(B = lambda x: x.B.shift(-1)).iloc[:-1].astype({'B':int}))
    
    df = pd.concat([df, df1]).sort_index(ignore_index=True)
    print (df)
        A  B
    0   1  1
    1   1  1
    2   1  2
    3  1b  2
    4  1b  2
    5  1b  2
    6  1b  3
    7   1  3
    

    【讨论】:

      猜你喜欢
      • 2020-06-01
      • 1970-01-01
      • 2022-07-22
      • 2019-06-04
      • 2020-06-08
      • 2016-08-22
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      相关资源
      最近更新 更多