首页 > 解决方案 > 有没有办法在熊猫中通过 id 获取先前收到的消息?

问题描述

我有一个这样的数据框:

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

标签: pandasdataframeiteration

解决方案


使用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

推荐阅读