如何按对象计算pandas组列中的不同值?

Rom*_*man 22 python group-by pandas

我有一个pandas数据框并将其分为两列(例如col1col2).为固定值col1col2(即,对于A组)我可以在几个不同的值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
Run Code Online (Sandbox Code Playgroud)

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

1  1  2
1  2  1
2  1  3
2  2  1
Run Code Online (Sandbox Code Playgroud)

Rom*_*man 27

df.groupby(['col1','col2'])['col3'].nunique().reset_index()
Run Code Online (Sandbox Code Playgroud)

  • 在每个组上调用``value_count``(必须重建系列)会有更多的开销(而不是只返回ndarray的``unique``).这实际上可能是非平凡的.如果您不需要函数内部的索引,那么您通常可以避免这种惩罚(通过不实例化该系列,value_counts会执行,然后被丢弃,因为您需要的只是它的len) (2认同)

Jef*_*eff 21

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
Run Code Online (Sandbox Code Playgroud)