python - 如果连续行在某些列上匹配,则在 Pandas 中添加连续行

标签 python pandas

我有一个如下所示的数据框:

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 的所有情况相加,而不是仅连续的。

有什么想法吗?

最佳答案

您可以使用groupbySeries 创建,由 ne 进行比较列 URL 并移动,上次使用 cumsum使用 bool 掩码:

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
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  

关于python - 如果连续行在某些列上匹配,则在 Pandas 中添加连续行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40656632/

相关文章:

python - 使用python将JSON导入mysql

python Pandas 调用 groupby.agg 中的复杂函数

python - python 中的 set() 运行时

python - 使用滚动窗口获取 pandas 随着时间的推移的值(value)计数

python - 使用 PyDrive 将 Pandas DataFrame 作为 Excel 文件直接上传到 Google Drive

python - 如何使用 lambda 函数将 Python 中字符串列表的第二个和倒数第二个字母转换为大写并返回 pandas DataFrame

python - pandas DataFrame 从 DateTimeIndex 中选择行列表 - KeyError。理解为什么

python - 如何将 DataFrame 中的 K 个随机值附加到不重复的列表列表中?

python - 根据特定日期值对 pandas 数据框进行子集化

python - 设置最大线程以保持主线程的更好解决方案?