python - 按最近 3 个月和 ID 过滤数据

标签 python pandas

我有 pandas 数据框,其中有 2 列,

    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

我尝试了 pandas 的过滤技术,但我未能应用多个条件,其中第二个条件是最近几个月。

最佳答案

使用to_datetime首先,按 DataFrame.sort_values 对两列进行排序, 通过 Series.dt.strftimeMonth 列转换回原始格式并调用GroupBy.tail :

df['Month'] = pd.to_datetime(df['Month'], format='%b-%y')
df1 = (df.sort_values(['ID','Month'])
         .assign(Month=df['Month'].dt.strftime('%b-%y'))
         .groupby('ID')
         .tail(3))
print (df1)
    ID   Month
1    1  Dec-17
0    1  Jan-18
2    1  Feb-18
6    2  Jan-18
8    2  Feb-18
11   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

关于python - 按最近 3 个月和 ID 过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56020628/

相关文章:

Python - 连接或堆叠两个以上不同形状的数组

python - 将标准输出重定向到 Python 中的文件?

python - 如何在 Python 中合并字典中的所有数据框

python - Python 中有哪些线程安全的数据持久化对象用于数据持久化?

python - Scikit DBSCAN eps 和 min_sample 值确定

python - 基于连续时间步计算事件

python - 参数化 pandas 数据框名称

Python:如何标记此数据集

python - scipy.fft 链接到 numpy.fft.fftpack.fft 的事实是否记录在任何地方?

python - 如何将 "Day_Name Month Day_No. Time Year"转换为日期格式?