[英]Counting pairs of rows in pandas
我有这种数据框:
id type
1 a
1 b
2 b
2 a
3 c
3 b
(每个 ID 肯定只有 2 行)
我想计算每对的数量,当一对是每个 ID 的两种类型时。 我的意思是,要获得上一张表的结果:
pair count
(a, b) 2
(b, c) 1
谢谢!
您可以在排序后将一种类型的所有元素聚合到列表中
pair = df.sort_values('type').groupby('id').agg(tuple)
然后按此新列分组:
print(pair.groupby('type').size())
这使
type
(a, b) 2
(b, c) 1
dtype: int64
这里的排序确保你永远不会有(b, a)
,这总是变成(a, b)
所以它们总是被组合在一起。 如果顺序很重要,请删除排序。
您可以使用frozenset
将可散列的无序对象传递给value_counts
:
df.groupby('id')['type'].agg(frozenset).value_counts()
output:
(a, b) 2
(b, c) 1
Name: type, dtype: int64
请注意,索引中的对象是frozenset
。 我建议保持这种方式(并学习如何使用它们),但如果你真的需要元组:
out = df.groupby('id')['type'].agg(frozenset).value_counts()
out.index = out.index.map(tuple)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.