【发布时间】:2020-07-12 12:46:41
【问题描述】:
C下午好,
我有一个像下面这样的数据
+---+---+--------+
| |USR| MMMMYY |
+---+---+--------+
| 1 | A | 200002 |
+---+---+--------+
| 2 | A | 200003 |
+---+---+--------+
| 3 | A | 200004 |
+---+---+--------+
| 4 | A | 200005 |
+---+---+--------+
| 5 | B | 200001 |
+---+---+--------+
| 6 | B | 200003 |
+---+---+--------+
| 7 | B | 200008 |
+---+---+--------+
| 8 | B | 200009 |
+---+---+--------+
我只需要获得每个 USR 的前三个 *CONSECUTIVE MMMMYY。
+---+---+--------+
| |USR| MMMMYY |
+---+---+--------+
| 1 | A | 200002 |
+---+---+--------+
| 2 | A | 200003 |
+---+---+--------+
| 3 | A | 200004 |
+---+---+--------+
| 5 | B | 200001 |
+---+---+--------+
| 6 | B | 200003 |
+---+---+--------+
我能够使用 head(3) 获取前 3 条记录
df.sort_values(['USR', 'MMMMYY' ], ascending=[True, True]).groupby('USR', as_index=False).head(3)
但它当然不会带回我需要的东西,也没有使用
df['mm_dif']=df.groupby(['USR'])['MMMMYY'].diff()
df['mm_dif2']=df.groupby(['USR'])['MMMMYY'].diff(-1)
df['check']=np.where((df.mm_dif==1) | (df.mm_dif2==-1),True,False)
当 ['check'] 为真时,它会得到连续的,但在某些情况下,我可能只需要得到 200001 和 200003 并且它们之间不是连续的。任何指导将不胜感激
谢谢
【问题讨论】:
-
我不明白为什么不选择
B 200008。MMMMYY看起来也不是有效的日期格式。 -
未选中,因为对于 B,它将是从 200001 年开始的前三个月。 MMMMYY 我在当月的第一个日期转换为日期时间,否则当 a 的第一个值时我会遇到问题USR 是 200011 或 200012 * 为了清楚起见,在问题中添加了连续。我的坏
标签: python pandas dataframe time-series