python - 如何按组按字母顺序过滤行
问题描述
我有一个包含属于文档问题的项目的 DataFrame 。例如,doc1 issue A 有项目 1 和 2;doc1 问题 B 有第 5 项和第 8 项。
df_source=pd.DataFrame([('doc1','A',1,4),('doc1','A',2,0),('doc1','B',5,6),('doc1','B',8,6), ('doc1','C',8,4),('doc1','C',4,4), ('doc2','B',0,5),('doc2','B',1,5), ('doc3','B',5,6),('doc3','K',4,4),('doc3','K',10,4)], columns=['Doc_name','Doc_Issue','item','prop2'])
Doc_name Doc_Issue item prop2
0 doc1 A 1 4
1 doc1 A 2 0
2 doc1 B 5 6
3 doc1 B 8 6
4 doc1 C 8 4
5 doc1 C 4 4
6 doc2 B 0 5
7 doc2 B 1 5
8 doc3 B 5 6
9 doc3 K 4 4
10 doc3 K 10 4
我想过滤 DataFrame,所以我只得到最新一期的项目:
df_result=pd.DataFrame([('doc1','C',8,4),('doc1','C',4,4), ('doc2','B',0,5),('doc2','B',1,5), ('doc3','K',4,4),('doc3','K',10,4)], columns=['Doc_name','Doc_Issue','item','prop2'])
Doc_name Doc_Issue item prop2
0 doc1 C 8 4
1 doc1 C 4 4
2 doc2 B 0 5
3 doc2 B 1 5
4 doc3 K 4 4
5 doc3 K 10 4
解决方案
获取每组中的最后两个并使用 loc 访问器过滤它们。传递索引值以使用 loc accccesor。下面的代码
df_source.loc[df_source.groupby('Doc_name')['Doc_Issue'].tail(2).index.get_level_values(0),:]
Doc_name Doc_Issue item prop2
4 doc1 C 8 4
5 doc1 C 4 4
6 doc2 B 0 5
7 doc2 B 1 5
9 doc3 K 4 4
10 doc3 K 10 4
推荐阅读
- javascript - 下拉菜单无法正常工作。(html)
- xamarin.android - 如何用 Assets 中的文件标题填充 listView?
- javascript - 如何为 firebase 配置 nativescript-vue 应用程序?
- c++ - 将指针传递给函数或数组到函数
- r - 如何使用 plotly 从图表中删除因子?
- javascript - 如何动态覆盖来自某个文件夹的一组分组图像
- unity3d - 如何在工具栏上应用表面磁性?
- java - 如何使用 Java 客户端在 Azure 中将 PublicIpAddress 与 LoadBalancer 分离?
- java - 如何在与 Firebase 关联的 Android Studio 中显示我的应用的所有在线用户?
- python - 芹菜:找不到模块