在python中与另一列具有相同值的行中选择具有最高列值的csv行

保罗·米勒

我使用潜在Dirichlet分配为5000多个txt文档创建了一个包含20个主题的主题模型。我现在有一个.csv文件,其中包含三列:文档编号,主题编号和文档中主题的概率。看起来像这样(对于文档n°1和n°2):

1   1   0,113
1   4   0,2
1   7   0,156
1   17  0,065
1   18  0,463
2   1   0,44
2   6   0,207
2   14  0,103
2   16  0,126
2   17  0,015
2   18  0,106

基本上,我想为某个主题知道该主题最有可能出现的文档列表。

我想我将必须执行以下操作:

1)对于第1列中的每个相同值(称为doc_number),获取第3列中的最高值(称其为highest_prob)。

2)对于获得的每个doc_number(应该与文档数一样多),在第2列中获取相应的主题号(称其为topic_number)。

3)返回我感兴趣的特定topic_number相关doc_number列表

我对python很陌生,并且不知道如何继续使用csv包或熊猫...

耶斯列尔

你可以先中柱并转换为通过然后,通过柱,并得到列的最大值的最后通过以下方式获取所有记录replace ,.probabilityfloatastypegroupbydocument_numberindexprobabilityidxmaxloc

import pandas as pd

df = pd.DataFrame({'document_number': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 2, 6: 2, 7: 2, 8: 2, 9: 2, 10: 2}, 
                   'probability': {0: '0,113', 1: '0,2', 2: '0,156', 3: '0,065', 4: '0,463', 5: '0,44', 6: '0,207', 7: '0,103', 8: '0,126', 9: '0,015', 10: '0,106'}, 
                   'topic_number': {0: 1, 1: 4, 2: 7, 3: 17, 4: 18, 5: 1, 6: 6, 7: 14, 8: 16, 9: 17, 10: 18}}, 
                    columns = ['document_number','topic_number','probability'])

print (df)
    document_number  topic_number probability
0                 1             1       0,113
1                 1             4         0,2
2                 1             7       0,156
3                 1            17       0,065
4                 1            18       0,463
5                 2             1        0,44
6                 2             6       0,207
7                 2            14       0,103
8                 2            16       0,126
9                 2            17       0,015
10                2            18       0,106
df['probability'] = df.probability.str.replace(',','.').astype(float)

print (df.groupby('document_number')['probability'].idxmax())
1    4
2    5
Name: probability, dtype: int64

print (df.loc[df.groupby('document_number')['probability'].idxmax()])
   document_number  topic_number  probability
4                1            18        0.463
5                2             1        0.440

最后set_index从列document_number转换为to_dicttopic_number

print (df.loc[df.groupby('document_number')['probability'].idxmax()]
         .set_index('document_number')['topic_number'])

document_number
1    18
2     1
Name: topic_number, dtype: int64

print (df.loc[df.groupby('document_number')['probability'].idxmax()]
         .set_index('document_number')['topic_number'].to_dict())
{1: 18, 2: 1}

另一种解决方案是sort_values按列probability,然后groupby进行汇总first

print (df.sort_values(by="probability", ascending=False)
         .groupby('document_number', as_index=False)
         .first())

   document_number  topic_number  probability
0                1            18        0.463
1                2             1        0.440

print (df.sort_values(by="probability", ascending=False)
         .groupby('document_number', as_index=False)
         .first().set_index('document_number')['topic_number'])

document_number
1    18
2     1
Name: topic_number, dtype: int64

print (df.sort_values(by="probability", ascending=False)
         .groupby('document_number', as_index=False)
         .first().set_index('document_number')['topic_number'].to_dict())
{1: 18, 2: 1}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sql:使用单个查询在另一列中选择具有相同列值的行

来自分类Dev

选择在一列中具有相同值而在另一列中具有不同值的行

来自分类Dev

在mysql中选择具有相同值的另一列的行

来自分类Dev

在表的另一列中选择具有相同id但不同值的行

来自分类Dev

从表中选择所有行,除了具有相同 id 的另一个表中的行在另一列中具有特定值

来自分类Dev

R:在csv文件中选择在第一列中具有值的特定行

来自分类Dev

选择另一列中具有相同ID但值不同的行

来自分类Dev

查找一列中具有相同值而另一列中具有其他值的行?

来自分类Dev

在多行的一列中查找具有相同值的行,而另一列具有不同的值

来自分类Dev

查找另一列中具有相同值的行-Python

来自分类Dev

如何在Laravel查询构建器中获取一列具有最高值而另一列具有特定值的行

来自分类Dev

从不同的列中选择具有相同值的行

来自分类Dev

从不同的列中选择具有相同值的行

来自分类Dev

给定另一列,选择一列具有不同值的行

来自分类Dev

选择在列中具有相同值而在另一列中具有不同值的记录

来自分类Dev

如何选择具有在一列中重复但在另一列中具有不同值的列值的行?

来自分类Dev

删除一列中具有重复值但另一列中具有不同值的行

来自分类Dev

确定每一行在另一列中指定的组中是否具有最高值

来自分类Dev

Python,合并具有相同ID的行-日期,但一列中的值不同

来自分类Dev

如果另一列具有相同的值,则将列中每一行的数据插入表中

来自分类Dev

选择具有相同 id 但在另一列中的所有空值的行并按相同的 id 分组

来自分类Dev

如果某一列包含特定值,则选择具有相同ID的所有行

来自分类Dev

R- 在四列中的至少一列中选择具有非 NA 值的行

来自分类Dev

选择具有唯一列值的行

来自分类Dev

如何提取与某行相同的一列中具有相同值的所有行?

来自分类Dev

合并具有相同值和总和值的同一列和表中的行

来自分类Dev

如何将一列中的值复制到R中另一列中具有相同值的行?

来自分类Dev

从具有相同ID的行中的不同列中选择值

来自分类Dev

MySQL 选择查询:SUM() 行具有不同的值,来自另一列

Related 相关文章

  1. 1

    sql:使用单个查询在另一列中选择具有相同列值的行

  2. 2

    选择在一列中具有相同值而在另一列中具有不同值的行

  3. 3

    在mysql中选择具有相同值的另一列的行

  4. 4

    在表的另一列中选择具有相同id但不同值的行

  5. 5

    从表中选择所有行,除了具有相同 id 的另一个表中的行在另一列中具有特定值

  6. 6

    R:在csv文件中选择在第一列中具有值的特定行

  7. 7

    选择另一列中具有相同ID但值不同的行

  8. 8

    查找一列中具有相同值而另一列中具有其他值的行?

  9. 9

    在多行的一列中查找具有相同值的行,而另一列具有不同的值

  10. 10

    查找另一列中具有相同值的行-Python

  11. 11

    如何在Laravel查询构建器中获取一列具有最高值而另一列具有特定值的行

  12. 12

    从不同的列中选择具有相同值的行

  13. 13

    从不同的列中选择具有相同值的行

  14. 14

    给定另一列,选择一列具有不同值的行

  15. 15

    选择在列中具有相同值而在另一列中具有不同值的记录

  16. 16

    如何选择具有在一列中重复但在另一列中具有不同值的列值的行?

  17. 17

    删除一列中具有重复值但另一列中具有不同值的行

  18. 18

    确定每一行在另一列中指定的组中是否具有最高值

  19. 19

    Python,合并具有相同ID的行-日期,但一列中的值不同

  20. 20

    如果另一列具有相同的值,则将列中每一行的数据插入表中

  21. 21

    选择具有相同 id 但在另一列中的所有空值的行并按相同的 id 分组

  22. 22

    如果某一列包含特定值,则选择具有相同ID的所有行

  23. 23

    R- 在四列中的至少一列中选择具有非 NA 值的行

  24. 24

    选择具有唯一列值的行

  25. 25

    如何提取与某行相同的一列中具有相同值的所有行?

  26. 26

    合并具有相同值和总和值的同一列和表中的行

  27. 27

    如何将一列中的值复制到R中另一列中具有相同值的行?

  28. 28

    从具有相同ID的行中的不同列中选择值

  29. 29

    MySQL 选择查询:SUM() 行具有不同的值,来自另一列

热门标签

归档