如何按组按字母顺序筛选行



我有一个DataFrame与项目属于文档问题。例如,doc1 issue A有项目1和2;文档1 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

在你的情况下transform+last

out = df[df.Doc_Issue ==df.groupby('Doc_name')['Doc_Issue'].transform('last')]
Out[60]: 
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

获取每组中的最后两个,并使用loc访问器对它们进行筛选。传递索引值以使用loc访问器。下列代码

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

相关内容

  • 没有找到相关文章

最新更新