代码之家  ›  专栏  ›  技术社区  ›  moltke_colombia

有没有一种方法可以通过pandas中的id获取之前收到的消息?

  •  0
  • moltke_colombia  · 技术社区  · 4 年前

    我有这样一个数据帧:

    ID  Message     week
    
    10 A            1
    11 A            1
    12 C            1
    10 B            2
    12 B            2
    

    我怎么能弄到这样的

    ID  Message     week  previous
    
    10 A            1     nan
    11 A            1     nan
    12 C            1     nan
    10 B            2     A
    12 B            2     A
    
    2 回复  |  直到 4 年前
        1
  •  2
  •   ALollz    4 年前

    使用 asof allow_exact_matches=False 防止在同一周合并。

    df = df.sort_values('week')  # Only b/c merge_asof requires sorted input
    
    res = (pd.merge_asof(df, df.rename(columns={'Message': 'previous'}), 
                         on='week', by='ID',
                         direction='backward', allow_exact_matches=False))
    

       ID Message  week previous
    0  10       A     1      NaN
    1  11       A     1      NaN
    2  12       C     1      NaN
    3  10       B     2        A
    4  12       B     2        C
    
        2
  •  2
  •   Erfan    4 年前

    groupby 具有 Series.shift

    df["previous"] = df.groupby("ID")["Message"].shift()
    
       ID Message  week previous
    0  10       A     1      NaN
    1  11       A     1      NaN
    2  12       C     1      NaN
    3  10       B     2        A
    4  12       B     2        C