【发布时间】:2013-10-17 03:43:25
【问题描述】:
我在 python 中有一个带有“a”、“b”、“c”列的 pandas 数据框。 'a','b' 对是唯一的并且重复多次。 'c' 一直在变化。我想找到出现最多的 10 对 'a','b' 并将它们放入数据框中,但不知道如何。任何帮助表示赞赏。
【问题讨论】:
我在 python 中有一个带有“a”、“b”、“c”列的 pandas 数据框。 'a','b' 对是唯一的并且重复多次。 'c' 一直在变化。我想找到出现最多的 10 对 'a','b' 并将它们放入数据框中,但不知道如何。任何帮助表示赞赏。
【问题讨论】:
我不完全确定我关注你,但假设你的意思是你有一个看起来像这样的 DataFrame
>>> N = 1000
>>> df = pd.DataFrame(np.random.randint(0, 10, (N, 3)), columns="A B C".split())
>>> df.head()
A B C
0 7 4 5
1 5 1 3
2 8 9 8
3 2 3 0
4 2 3 0
而您只想计算 (A, B) 对,这很简单:
>>> df.groupby(["A", "B"]).size().order().iloc[-10:]
A B
6 1 13
1 0 14
4 0 14
7 2 14
1 6 15
8 2 15
1 8 16
2 6 16
6 4 16
7 4 16
dtype: int64
这可以分为四个部分:
groupby,将数据按(A, B)元组分组size,计算每个组的大小order,返回按值排序的Series
iloc,这让我们可以按位置选择Series 中的最后 10 个条目这会产生一个Series,但您可以通过将它传递给pd.DataFrame 来生成一个DataFrame。
【讨论】: