按计数聚合,将所有列保留在 Pandas 中
Aggregate by count, keep all columns in Pandas
这是一个例子pandas DataFrame:
x = pd.DataFrame({"id": [10, 10, 20, 10, 50, 50],
"name": ["A", "A", "B", "A", "C", "C"]})
我会展示我想做的事情,使用 data.table in R:
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()
returns:
A 3
C 2
B 1
dtype: int64
试试这个来获取由 ['id', 'name']
标识的每个子组的长度,以及 return 组键作为索引。
x.groupby(['id', 'name'], as_index=True).agg(len)
id name
10 A 3
20 B 1
50 C 2
dtype: int64
您可以 groupby
在 'name' 和 'id' 上 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
这是一个例子pandas DataFrame:
x = pd.DataFrame({"id": [10, 10, 20, 10, 50, 50],
"name": ["A", "A", "B", "A", "C", "C"]})
我会展示我想做的事情,使用 data.table in R:
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()
returns:
A 3
C 2
B 1
dtype: int64
试试这个来获取由 ['id', 'name']
标识的每个子组的长度,以及 return 组键作为索引。
x.groupby(['id', 'name'], as_index=True).agg(len)
id name
10 A 3
20 B 1
50 C 2
dtype: int64
您可以 groupby
在 'name' 和 'id' 上 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