繁体   English   中英

计算 pandas 中的行对

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM