按计数聚合,将所有列保留在Pandas中

时间:2015-07-23 13:35:50

标签: python r pandas data.table

以下是pandas DataFrame示例:

x = pd.DataFrame({"id": [10, 10, 20, 10, 50, 50], 
                  "name": ["A", "A", "B", "A", "C", "C"]})

我将使用R:

中的data.table显示我想要做的事情
x = data.table(id = c(10,10,20,10,50,50), name = c("A", "A", "B", "A", "C", "C"))
x[, .N, by = list(name, id)]

哪个输出:

   name id N

1:    A 10 3
2:    B 20 1
3:    C 50 2

我可以和Pandas得到类似的东西,但我不能保留id列:

x["name"].value_counts()

返回:

A    3
C    2
B    1
dtype: int64

2 个答案:

答案 0 :(得分:1)

尝试此操作以获取['id', 'name']标识的每个子组的长度,并将组密钥作为索引返回。

x.groupby(['id', 'name'], as_index=True).agg(len)

id  name
10  A       3
20  B       1
50  C       2
dtype: int64

答案 1 :(得分:0)

您可以在{name'和'id'以及groupby apply功能上len

In [232]:
x = pd.DataFrame({"id": [10, 10, 20, 10, 50, 50], 
                  "name": ["A", "A", "B", "A", "C", "C"]})
x.groupby(['id','name']).apply(len)

Out[232]:
id  name
10  A       3
20  B       1
50  C       2
dtype: int64