python:计算列中重复条目的数量

时间:2018-02-09 20:07:02

标签: python pandas count

我有以下df:

date       id 
2000        1
2001        1 
2002        1
2000        2
2001        2
2002        2
2000        1
2001        1
2002        1

我想计算每个日期有多少重复的id。结果应如下所示:因为在每个日期,id 1都存在两次:

date       id        count
2000        1          2
2001        1          2
2002        1          2
2000        2          2
2001        2          2
2002        2          2
2000        1          2
2001        1          2
2002        1          2

我尝试了类似这样的东西,但当id为2时,这给了我1s。

df["count"] = df.groupby(["date", "id"])["count"].transform("count")

3 个答案:

答案 0 :(得分:3)

原始代码的问题是一个简单的修复。

df['count'] = df.groupby(['date', 'id']).transform('count')

如果我使用group并将其转换为新列,则会产生:

df = pd.DataFrame(np.random.randint(0,3,size=(10, 3)), columns=['A', 'B', 'C'])
df['count'] = df.groupby(['A', 'B'])['C'].transform('count')
print(df)

导致:

   A  B  C  count
0  1  2  0      1
1  0  0  0      2
2  2  0  2      4
3  2  0  1      4
4  2  0  2      4
5  2  0  1      4
6  0  0  0      2
7  2  2  0      3
8  2  2  1      3
9  2  2  2      3

答案 1 :(得分:1)

您可以使用duplicated

df.groupby('date').id.transform(lambda x : x.duplicated(keep=False).sum())
Out[208]: 
0    2
1    2
2    2
3    2
4    2
5    2
6    2
7    2
8    2
Name: id, dtype: int64

答案 2 :(得分:1)

另一个简单的解决方案: 尝试将日期和ID的列组合到第三列" date" +" ID"。现在,您可以使用count来查找新第3列中每个条目的重复数。

>>> dateID = [20001,20011,20021,20002,20012,20022,...]
>>> dateID.count("20001")
>>> 2
>>> dateID.count("20002")
>>> 2

您可以使用

计算dateID中每个项目的出现次数
[[x,dateID.count(x)] for x in set(dateID)]

也许更容易,就是使用counter:

>>> dateID=[x,y,z,x,y,z,z]
>>> from collections import Counter
>>> counter(dateID)
Counter({'x': 2, 'y': 2, 'z': 3})