我有 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.strftime
将 Month
列转换回原始格式并调用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/