首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫使用变换的更有效方法

熊猫使用变换的更有效方法
EN

Stack Overflow用户
提问于 2022-05-16 18:54:54
回答 1查看 60关注 0票数 1

我有以下数据:

我想要创建一个新的列,它计算一个IP交换域的次数。

输入:

代码语言:javascript
复制
    domain      ip      timestamp              next_domain    next_next_domain
0   Google      101     2020-04-01 23:01:41    Facebook       N/A
1   Google      101     2020-04-01 23:01:59    Facebook       N/A
2   Google      101     2020-04-02 12:01:41    Facebook       N/A
3   Facebook    101     2020-04-02 13:11:33    N/A            N/A
4   Facebook    101     2020-04-02 13:11:35    N/A            N/A
5   Youtube     103     2020-04-21 13:01:41    Google         Facebook
6   Youtube     103     2020-04-21 13:11:46    Google         Facebook
7   Youtube     103     2020-04-22 01:01:01    Google         Facebook
8   Google      103     2020-04-22 02:11:23    Facebook       Youtube
9   Facebook    103     2020-04-23 14:11:13    Youtube        N/A
10  Youtube     103     2020-04-23 14:11:55    N/A            N/A

我有以下代码,它提供了以下输出:

代码语言:javascript
复制
df['switch'] = df.groupby('ip')['domain'].transform(lambda x: x.shift().ne(x).sum()-1)

输出:

代码语言:javascript
复制
    domain      ip      timestamp              next_domain    next_next_domain  switch_count
0   Google      101     2020-04-01 23:01:41    Facebook       N/A               1
1   Google      101     2020-04-01 23:01:59    Facebook       N/A               1
2   Google      101     2020-04-02 12:01:41    Facebook       N/A               1
3   Facebook    101     2020-04-02 13:11:33    N/A            N/A               1
4   Facebook    101     2020-04-02 13:11:35    N/A            N/A               1
5   Youtube     103     2020-04-21 13:01:41    Google         Facebook          3
6   Youtube     103     2020-04-21 13:11:46    Google         Facebook          3
7   Youtube     103     2020-04-22 01:01:01    Google         Facebook          3
8   Google      103     2020-04-22 02:11:23    Facebook       Youtube           3
9   Facebook    103     2020-04-23 14:11:13    Youtube        N/A               3
10  Youtube     103     2020-04-23 14:11:55    N/A            N/A               3

IP 101切换1次,因为它来自Google -> Facebook。IP 103切换3次,因为它来自Youtube -> Google -> Facebook -> Youtube。

我有以下使用"transform“的解决方案,但是在我的数据集上运行需要很长时间。有没有更快更有效的解决方案不使用转换或应用?

EN

回答 1

Stack Overflow用户

发布于 2022-05-16 19:31:16

我想你可以事先算出差额(反正你减去了1)。但是,这需要按iptimestamp对df进行排序,以确保其工作正常。通过在groupby之外执行此操作,应该会大大加快速度。

代码语言:javascript
复制
df['switch_count'] = df['domain'].shift().ne(df['domain'])
df['switch_count'] = df.groupby('ip')['switch_count'].transform('sum') - 1
代码语言:javascript
复制
      domain   ip            timestamp next_domain next_next_domain  switch_count
0     Google  101  2020-04-01 23:01:41    Facebook              NaN             1
1     Google  101  2020-04-01 23:01:59    Facebook              NaN             1
2     Google  101  2020-04-02 12:01:41    Facebook              NaN             1
3   Facebook  101  2020-04-02 13:11:33         NaN              NaN             1
4   Facebook  101  2020-04-02 13:11:35         NaN              NaN             1
5    Youtube  103  2020-04-21 13:01:41      Google         Facebook             3
6    Youtube  103  2020-04-21 13:11:46      Google         Facebook             3
7    Youtube  103  2020-04-22 01:01:01      Google         Facebook             3
8     Google  103  2020-04-22 02:11:23    Facebook          Youtube             3
9   Facebook  103  2020-04-23 14:11:13     Youtube              NaN             3
10   Youtube  103  2020-04-23 14:11:55         NaN              NaN             3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72264255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档