pandas - 如何查找列连续月数为 6 的索引?
问题描述
例子
df
id date
A 201901
A 201902
A 201903
A 201904
A 201905
A 201906
A 202006
A 202007
A 202008
B 202008
B 202009
B 202109
B 202110
B 202111
C 201901
C 201902
C 201903
C 201904
C 201905
C 201906
C 202006
C 202007
C 202008
C 202009
C 202010
C 202011
对于每个 id,date
都进行排序。
预期的
我想找到连续 6 个月的 id。对于 id A
, 201901-201906 而 idC
是 202006-2020011
expected_id=['A','C']
col日期的类型是object
尝试
我不知道如何得到它。
解决方案
您可以通过以下方式使用聚合s修改以前的解决方案:count
GroupBy.size
df['date'] = pd.to_datetime(df['date'], format='%Y%m').dt.to_period('M')
new = df.groupby('id', group_keys=False)['date'].diff().ne(pd.offsets.MonthEnd()).cumsum()
df = df.groupby(['id',new]).size().reset_index(name='count')
print (df)
id date count
0 A 1 6
1 A 2 3
2 B 3 2
3 B 4 3
4 C 5 6
5 C 6 6
最后id
通过 equal 6
in DataFrame.loc
with过滤boolean indexing
:
expected_id = df.loc[df['count'].eq(6), 'id'].unique().tolist()
print (expected_id)
['A', 'C']
推荐阅读
- c# - 吸引给定点周围的对象而不重叠
- excel - 多个外部工作簿的 Worksheet_Change 事件
- reporting-services - 在不同组矩阵的每个实例之间显示矩阵
- javascript - ii 有可能在 firebase 存储中获得多少元素?
- artifactory - 我可以使用 webdav , davfs2 将相同的工件存储库安装到 100 多台机器上吗
- javascript - jQuery 单击使用 jQuery 的按钮并在 ajax 成功后将数据附加到响应
- mysql - SELECT COUNT(复杂查询中的空闲房间类别)
- node.js - mongodb 中不区分大小写的 find() 函数与 mongoose
- android - 爱普生SDK问题
- asp.net - 如何使用 ajax 将 id 从客户端传递到 webform