我正在尝试添加一列来计算电台日期(否)显示的次数。
例如,日期6/12/2013在No1中仅显示1条记录,因此计为1.在2013年5月11日的第3期有3条记录。第一次出现应计为1,第二次出现发生次数计为2,依此类推,第三次发生次数计为3次。
输入:
No Date Value
0 1 6/12/2013 35
1 1 6/13/2013 45
2 1 6/14/2013 23
3 1 6/14/2013 40
4 2 6/12/2013 15
5 2 6/13/2013 20
6 2 6/14/2013 24
7 2 7/23/2013 33
8 3 5/11/2013 10
9 3 5/11/2013 11
10 3 5/11/2013 34
11 3 5/18/2013 24
.
.
.
结果应如下所示:
No Date Value count
0 1 6/12/2013 35 1
1 1 6/13/2013 45 1
2 1 6/14/2013 23 1
3 1 6/14/2013 40 2
4 2 6/12/2013 15 1
5 2 6/13/2013 20 1
6 2 6/14/2013 24 1
7 2 7/23/2013 33 1
8 3 5/11/2013 10 1
9 3 5/11/2013 11 2
10 3 5/11/2013 34 3
11 3 5/18/2013 24 1
.
.
.
我自己的解决方案是
result = []
for n in df['No'].unique():
df1 = df[df['No'] == n]
for date in df1['Date'].unique():
df2 = df1[df1['Date'] == date]
df2['count'] = np.arange(len(df2)) + 1
result.append(df2)
并将结果合并在一起。但它运行得很慢。有更好的解决方案吗?
答案 0 :(得分:1)
df['count'] = df.groupby(['No', 'Date']).cumcount() + 1
从cumcount
开始,从0开始,必要时添加1。
结果输出:
No Date Value count
0 1 6/12/2013 35 1
1 1 6/13/2013 45 1
2 1 6/14/2013 23 1
3 1 6/14/2013 40 2
4 2 6/12/2013 15 1
5 2 6/13/2013 20 1
6 2 6/14/2013 24 1
7 2 7/23/2013 33 1
8 3 5/11/2013 10 1
9 3 5/11/2013 11 2
10 3 5/11/2013 34 3
11 3 5/18/2013 24 1