gpt4 book ai didi

python - Pandas :使用groupby计算重复行数

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:55 25 4
gpt4 key购买 nike

我有一个包含重复行的数据框

>>> d = pd.DataFrame({'n': ['a', 'a', 'a'], 'v': [1,2,1]})
>>> d
n v
0 a 1
1 a 2
2 a 1

我想了解如何具体使用 .groupby() 方法,以便我可以向数据框中添加一个新列,该列显示与当前行相同的行数。

>>> dd = d.groupby(by=['n','v'], as_index=False)  # Use all columns to find groups of identical rows
>>> for k,v in dd:
... print(k, "\n", v, "\n") # Check what we found
...
('a', 1)
n v
0 a 1
2 a 1

('a', 2)
n v
1 a 2

当我尝试对生成的 DataFrameGroupBy 对象执行 dd.count() 时,我得到了 IndexError: list index out of range。这似乎是因为所有列都用于分组操作并且没有其他列可用于计数。同样,dd.agg({'n', 'count'}) 失败并返回 ValueError: no results

我可以使用 .apply() 来实现看起来像结果的东西。

>>> dd.apply(lambda x: x.assign(freq=len(x)))
n v freq
0 0 a 1 2
2 a 1 2
1 1 a 2 1

然而,这有两个问题:1) 索引发生了一些变化,因此很难将其映射回原始索引,2) 这似乎不是惯用的 Pandas 和手册 discourage使用 .apply() 因为它可能很慢。

在使用 .groupby() 时,是否有更惯用的方法来计算重复行?

最佳答案

一个解决方案是使用 GroupBy.size 对于带有计数器的聚合输出:

d = d.groupby(by=['n','v']).size().reset_index(name='c')
print (d)
n v c
0 a 1 2
1 a 2 1

如果在 groupby 之后指定一些列名,您的解决方案就会起作用,因为没有其他列 n , v输入 DataFrame :

d = d.groupby(by=['n','v'])['n'].count().reset_index(name='c')

print (d)
n v c
0 a 1 2
1 a 2 1

如果需要带有 GroupBy.transform 的新列,还需要什么- 新列由聚合值填充:

d['c'] = d.groupby(by=['n','v'])['n'].transform('size')
print (d)
n v c
0 a 1 2
1 a 2 1
2 a 1 2

关于python - Pandas :使用groupby计算重复行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58520366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com