我有一个类似下面的数据框:
ID URL seconds
1 Email 9
1 Email 3
1 App 5
1 App 9
1 Faceboook 50
1 Faceboook 7
1 Faceboook 39
1 Faceboook 10
1 Email 39
1 Email 5
1 Email 57
1 Faceboook 7
1 Faceboook 32
1 Faceboook 3
2 App 11
2 App 10
2 Email 56
2 Faceboook 9
2 Faceboook 46
2 Faceboook 16
2 Email 21
我想用相同的ID对同一URL的连续视图的'秒'列求和。这就是我正在寻找的结果:
ID URL seconds
1 Email 12
1 App 14
1 Faceboook 106
1 Email 101
1 Faceboook 42
2 App 21
2 Email 56
2 Faceboook 71
2 Email 21
df.groupBy(['ID', 'URL']).sum()
在这种情况下不起作用,因为它会对相同ID的所有相同URL的情况求和,而不仅仅是连续的。
有什么想法吗?
答案 0 :(得分:3)
您可以按Series
列URL
进行比较后创建的boolean mask
使用groupby
,并使用print ((df.URL.ne(df.URL.shift())).cumsum())
0 1
1 1
2 2
3 2
4 3
5 3
6 3
7 3
8 4
9 4
10 4
11 5
12 5
13 5
14 6
15 6
16 7
17 8
18 8
19 8
20 9
Name: URL, dtype: int32
转移,上次使用ne
:< / p>
print (df['seconds'].groupby([(df.URL.ne(df.URL.shift())).cumsum(), df.ID, df.URL]).sum())
URL ID URL
1 1 Email 12
2 1 App 14
3 1 Faceboook 106
4 1 Email 101
5 1 Faceboook 42
6 2 App 21
7 2 Email 56
8 2 Faceboook 71
9 2 Email 21
Name: seconds, dtype: int64
print (df['seconds'].groupby([(df.URL.ne(df.URL.shift())).cumsum(), df.ID, df.URL])
.sum()
.reset_index(level=0, drop=True)
.reset_index())
ID URL seconds
0 1 Email 12
1 1 App 14
2 1 Faceboook 106
3 1 Email 101
4 1 Faceboook 42
5 2 App 21
6 2 Email 56
7 2 Faceboook 71
8 2 Email 21
Expression.Sql("{alias}.Column LIKE ?", $"%{stringValue}%", NHibernateUtil.String);