大熊猫计算独特的行

时间:2016-03-15 18:06:04

标签: python python-2.7 pandas counter

我有一个类似于:

的pandas数据框
ColA ColB
1    1
1    1
1    1
1    2
1    2
2    1
3    2

我想要一个与Counter具有相同功能的输出。我需要知道每行出现的时间(所有列都相同。

在这种情况下,正确的输出将是:

ColA ColB Count
1    1    3
1    2    2
2    1    1
3    2    1

我尝试了类似的东西:

df.groupby(['ColA','ColB']).ColA.count()

但是这给我带来了一些难看的输出我无法格式化

3 个答案:

答案 0 :(得分:4)

您可以size使用reset_index

print df.groupby(['ColA','ColB']).size().reset_index(name='Count')
   ColA  ColB  Count
0     1     1      3
1     1     2      2
2     2     1      1
3     3     2      1

答案 1 :(得分:2)

从 Pandas 1.1.0 开始,方法 pandas.DataFrame.value_counts 可用,它完全符合您的需要。它创建一个系列,其中唯一行作为多索引,计数作为值:

df = pd.DataFrame({'ColA': [1, 1, 1, 1, 1, 2, 3], 'ColB': [1, 1, 1, 2, 2, 1, 2]})
pd.options.display.multi_sparse = False  # option to print as requested

print(df.value_counts())                 # requires pandas >= 1.1.0

输出,其中 ColAColB 是多索引,第三列包含计数:

ColA  ColB
1     1       3
1     2       2
3     2       1
2     1       1
dtype: int64

答案 2 :(得分:0)

我只需要计算唯一行,并使用了以下替代方法:

len(df[['ColA','ColB']].drop_duplicates())

对于此任务,在我的数据上,它比len(df.groupby(['ColA','ColB']))快两倍,就像上面的更通用的解决方案一样。