【问题标题】:How to insert the last row of each group after each rows如何在每行之后插入每组的最后一行
【发布时间】:2019-12-03 21:24:37
【问题描述】:

我的需要是在同一组的每一行之后复制每个id组的最后一行ma​​x(num)

import pandas as pd

data = [{'id': 110, 'val1': 'A', 'num': 0}, 
        {'id': 110, 'val1': 'B', 'num': 1}, 
        {'id': 110, 'val1': 'C', 'num': 2},
        {'id': 220, 'val1': 'E', 'num': 0}, 
        {'id': 220, 'val1': 'F', 'num': 1}, 
        {'id': 220, 'val1': 'G', 'num': 2},
        {'id': 220, 'val1': 'X', 'num': 3},
        {'id': 300, 'val1': 'H', 'num': 0}, 
        {'id': 300, 'val1': 'I', 'num': 1}] 

df = pd.DataFrame(data)
df

我的数据框:

我在寻找什么:

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    这是mergewide_to_long 的一种方式,drop_duplicates 假设数据框有序,如果不是,请先使用sort_values

    s=df.merge(df.drop_duplicates('id',keep='last'),on='id').query('val1_x!=val1_y').reset_index()
    newdf=pd.wide_to_long(s,['val1','num'],i=['index','id'],j='drop',suffix='\\w+').\
             reset_index('id').reset_index(drop=True)
    newdf
         id val1  num
    0   110    A    0
    1   110    C    2
    2   110    B    1
    3   110    C    2
    4   220    E    0
    5   220    X    3
    6   220    F    1
    7   220    X    3
    8   220    G    2
    9   220    X    3
    10  300    H    0
    11  300    I    1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 2011-03-27
      相关资源
      最近更新 更多