【问题标题】:How to count distinct values in a column of a pandas group by object?如何按对象计算熊猫组列中的不同值?
【发布时间】:2013-07-29 09:00:00
【问题描述】:

我有一个 pandas 数据框并将其按两列分组(例如 col1col2)。对于col1col2 的固定值(即对于一个组),我可以在col3 中有几个不同的值。我想计算第三列中不同值的数量。

例如,如果我有这个作为我的输入:

1  1  1
1  1  1
1  1  2
1  2  3
1  2  3
1  2  3
2  1  1
2  1  2
2  1  3
2  2  3
2  2  3
2  2  3

我想将此表(数据框)作为输出:

1  1  2
1  2  1
2  1  3
2  2  1

【问题讨论】:

标签: python group-by pandas


【解决方案1】:
df.groupby(['col1','col2'])['col3'].nunique().reset_index()

【讨论】:

  • 有趣的是 nunique 似乎是 Jeff 的回答速度的两倍。
  • 奇怪!我也看到了。 Groupby 可能在这里采取了错误的所谓路径——将函数应用于组的逻辑非常密集。
  • 在每个组上调用value_count(必须重建系列)会产生更多开销(而不是只返回一个ndarray的unique)。这实际上可能很重要。如果您不需要函数内部的索引,那么您通常可以避免这种惩罚(通过不实例化 value_counts 所做的系列,然后被丢弃,因为您只需要它的 len)
  • 在 pandas 0.18.0 中使用 nunique() 似乎是最佳的
【解决方案2】:
In [17]: df
Out[17]: 
    0  1  2
0   1  1  1
1   1  1  1
2   1  1  2
3   1  2  3
4   1  2  3
5   1  2  3
6   2  1  1
7   2  1  2
8   2  1  3
9   2  2  3
10  2  2  3
11  2  2  3

In [19]: df.groupby([0,1])[2].apply(lambda x: len(x.unique()))
Out[19]: 
0  1
1  1    2
   2    1
2  1    3
   2    1
dtype: int64

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2021-01-22
    • 2019-08-19
    • 2022-10-14
    • 2020-02-27
    • 2022-07-19
    相关资源
    最近更新 更多