我有以下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")
答案 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})