【问题标题】:First N distinct column values前 N 个不同的列值
【发布时间】:2022-01-07 09:55:04
【问题描述】:

目标:从列的前 N ​​个不同值中提取 list

Distinct,意思是彼此不同但不是唯一的对于整个DataFrame。


例如,col A 的前 5 个不同值

数据帧:

             A    B    C
0         BERT  foo  bar
1         BERT  foo  bar
2          MLP  foo  bar
3       Albert  foo  bar
4       Albert  foo  bar
5       Albert  foo  bar
6      Roberta  foo  bar
7   Roberta v2  foo  bar
8   Roberta v2  foo  bar
9      BigBird  foo  bar
10      Muppet  foo  bar

期望的输出:

top_5 = ['BERT', 'MLP', 'Albert', 'Roberta', 'Roberta v2']

实际上,忽略重复值和所有其他先前的不同值。

如果我在这篇文章中还有什么需要澄清的,请告诉我。

【问题讨论】:

    标签: python pandas list dataframe if-statement


    【解决方案1】:

    使用 Series.unique 选择前 5 个值并转换为列表:

    first_5_unique = df.A.unique()[:5].tolist()
    

    或将Series.drop_duplicatesSeries.head 一起使用:

    first_5_unique = df.A.drop_duplicates().head().tolist()
    

    【讨论】:

      【解决方案2】:

      如果您有一个大型数据框,一个非常有效的解决方案是在itertools/more_itertools.unique_everseen 的帮助下使用生成器:

      # pip install more-itertools
      from itertools import islice
      from more_itertools import unique_everseen
      
      list(islice(unique_everseen(df['A']), 5))
      

      如果您处理数千行,这会快几个数量级,因为一旦收集到足够多的元素,迭代就会停止(与使用 pandas'unique 读取整个列相比)

      【讨论】:

      • 就我而言,DataFrame 很小。我会记录这个解决方案以备将来工作。干杯
      猜你喜欢
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 2019-02-09
      相关资源
      最近更新 更多