Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫只选择每组的前3个YYYYMM_Python_Pandas_Dataframe_Time Series - Fatal编程技术网

Python 熊猫只选择每组的前3个YYYYMM

Python 熊猫只选择每组的前3个YYYYMM,python,pandas,dataframe,time-series,Python,Pandas,Dataframe,Time Series,下午好 我有一个像下面这样的数据框 +---+---+--------+ | |USR| MMMMYY | +---+---+--------+ | 1 | A | 200002 | +---+---+--------+ | 2 | A | 200003 | +---+---+--------+ | 3 | A | 200004 | +---+---+--------+ | 4 | A | 200005 | +---+---+--------+ | 5 | B | 200001 | +---

下午好

我有一个像下面这样的数据框

+---+---+--------+
|   |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的前三个*连续MMMMYY

+---+---+--------+
|   |USR| MMMMYY |
+---+---+--------+
| 1 | A | 200002 |
+---+---+--------+
| 2 | A | 200003 |
+---+---+--------+
| 3 | A | 200004 |
+---+---+--------+
| 5 | B | 200001 |
+---+---+--------+
| 6 | B | 200003 |
+---+---+--------+
我可以使用head(3)获取前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,并且它们之间不是连续的。任何指导都将不胜感激


谢谢

您的
MMMMYY
是datetime,然后将其转到
datetime
首先键入:

df['MMMMYY'] = pd.to_datetime(df.MMMMYY, format='%Y%m')

s = df.groupby('USR')['MMMMYY'].transform('min') + pd.offsets.MonthOffset(3)

df[df.MMMMYY<s]

我不明白为什么没有选择
B20008
。另外,
MMMMYY
看起来不是有效的日期格式。未选择,因为对于B,它将是从200001年开始的前三个月。MMMMYY Im转换为每月第一个日期的datetime,否则,当USR的第一个值为200011或200012*时,我会遇到问题,为清楚起见,在问题中连续添加。我的宝贝,这是一个约会时间case@gizq当你打印(df.MMMMYY.dtype)时,你会得到什么?我得到一个int64,但我必须转换为datetime,或者对于像usr F MMMYY 200011这样的系列开始,我会遇到200101的问题谢谢你monthOffset,比较工作得很好谢谢你!
df['MMMMYY'] = pd.to_datetime(df.MMMMYY, format='%Y%m')

s = df.groupby('USR')['MMMMYY'].transform('min') + pd.offsets.MonthOffset(3)

df[df.MMMMYY<s]
  USR     MMMMYY
1   A 2000-02-01
2   A 2000-03-01
3   A 2000-04-01
5   B 2000-01-01
6   B 2000-03-01