Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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个月和ID筛选数据_Python_Pandas - Fatal编程技术网

Python 按过去3个月和ID筛选数据

Python 按过去3个月和ID筛选数据,python,pandas,Python,Pandas,我有一个数据框,其中有两列 ID Month 1 Jan-18 1 Dec-17 1 Feb-18 1 Nov-17 1 Oct-17 1 Sep-17 2 Jan-18 2 Dec-17 2 Feb-18 2 Nov-17 2 Oct-17 2 Mar-18 我想通过ID获取最近3个月的数据 预期产量 I

我有一个数据框,其中有两列

    ID   Month

    1    Jan-18
    1    Dec-17
    1    Feb-18
    1    Nov-17
    1    Oct-17
    1    Sep-17
    2    Jan-18
    2    Dec-17
    2    Feb-18
    2    Nov-17
    2    Oct-17
    2    Mar-18
我想通过ID获取最近3个月的数据

预期产量

    ID   Month

    1    Dec-17
    1    Jan-18
    1    Feb-18

    2    Jan-18
    2    Feb-18
    2    Mar-18
我尝试了从熊猫身上筛选出的技术,但在第二个条件是最近几个月的情况下,我未能应用多个条件

首先使用,按两列排序,将月份列转换回原始格式,然后调用:

另一个具有月周期的解决方案:

df['Month'] = pd.to_datetime(df['Month'], format='%b-%y').dt.to_period('m')
df1 = (df.sort_values(['ID','Month'])
         .groupby('ID')
         .tail(3))
print (df1)
    ID    Month
1    1  2017-12
0    1  2018-01
2    1  2018-02
6    2  2018-01
8    2  2018-02
11   2  2018-03
首先使用,按两列排序,将月份列转换回原始格式,然后调用:

另一个具有月周期的解决方案:

df['Month'] = pd.to_datetime(df['Month'], format='%b-%y').dt.to_period('m')
df1 = (df.sort_values(['ID','Month'])
         .groupby('ID')
         .tail(3))
print (df1)
    ID    Month
1    1  2017-12
0    1  2018-01
2    1  2018-02
6    2  2018-01
8    2  2018-02
11   2  2018-03
不带赋值的选项

不带赋值的选项


谢谢。这个解决方案非常有效。非常感谢。还需要一个帮助。如何获取剩余数据,我指的是相反的条件。@Ajayjadhav-如果有默认索引,请使用df2=df[~df.index.isindf1.index]非常感谢您的及时帮助非常感谢。这个解决方案非常有效。非常感谢。还需要一个帮助。如何获取剩余数据,我指的是相反的条件。@Ajayjadhav-如果有默认索引,请使用df2=df[~df.index.isindf1.index]非常感谢您的及时帮助
df['Month'] = pd.to_datetime(df['Month'], format='%b-%y')
df2=df.sort_values(by=['ID','Month']).groupby('ID').tail(3)
df2['Month'] = df['Month'].dt.strftime('%b-%y')
print(df2)