在使用python / pandas DataFrame计算值之前验证行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在使用python / pandas DataFrame计算值之前验证行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3722字,纯文字阅读大概需要6分钟。
内容图文
我是python和pandas的新手,在尝试了几种方法之后,我希望根据我的分析目标,就结构该数据集的最佳方法,向所有人提出一些建议.
给定以下DataFrame:
id event timestamp
1 "page 1 load" 1/1/2014 0:00:01
1 "page 1 exit" 1/1/2014 0:00:31
2 "page 2 load" 1/1/2014 0:01:01
2 "page 2 exit" 1/1/2014 0:01:31
3 "page 3 load" 1/1/2014 0:02:01
3 "page 3 exit" 1/1/2014 0:02:31
4 "page 1 load" 2/1/2014 1:00:01
4 "page 1 exit" 2/1/2014 1:00:31
5 "page 2 load" 2/1/2014 1:01:01
5 "page 2 exit" 2/1/2014 1:01:31
6 "page 3 load" 2/1/2014 1:02:01
6 "page 3 exit" 2/1/2014 1:02:31
目的是计算从负载到出口所经过的时间.但是,在计算经过的时间之前,我首先需要验证加载和退出时间戳确实来自同一会话(id).我正在考虑的方法是处理源数据集并创建一个新的DataFrame,其中的每一行都是已验证数据的组合,添加一个经过的列,使计算和分组更加容易,像这样.
id event_1 timestamp_1 event_2 timestamp_2 elapsed
1 "page 1 load" 1/1/2014 0:00:01 "page 1 exit" 1/1/2014 0:00:31 0:00:30
2 "page 2 load" 1/1/2014 0:01:01 "page 2 exit" 1/1/2014 0:01:31 0:00:30
3 "page 3 load" 1/1/2014 0:02:01 "page 3 exit" 1/1/2014 0:02:31 0:00:30
如果这是一个好方法?如果是这样,创建此新DataFrame的最佳方法是什么?
解决方法:
我会考虑将事件分成单独的列使用str.extract:
In [11]: df['event'].str.extract('page (?P<page>\d+) (?P<event>\w+)')
Out[11]:
page event
0 1 load
1 1 exit
2 2 load
3 2 exit
4 3 load
5 3 exit
6 1 load
7 1 exit
8 2 load
9 2 exit
10 3 load
11 3 exit
[12 rows x 2 columns]
如果将此设置为列:
In [12]: df[['page', 'event']] = df['event'].str.extract('page (?P<page>\d+) (?P<event>\w+)')
In [13]: df
Out[13]:
id event timestamp page
0 1 load 2014-01-01 00:00:01 1
1 1 exit 2014-01-01 00:00:31 1
2 2 load 2014-01-01 00:01:01 2
3 2 exit 2014-01-01 00:01:31 2
4 3 load 2014-01-01 00:02:01 3
5 3 exit 2014-01-01 00:02:31 3
6 4 load 2014-02-01 01:00:01 1
7 4 exit 2014-02-01 01:00:31 1
8 5 load 2014-02-01 01:01:01 2
9 5 exit 2014-02-01 01:01:31 2
10 6 load 2014-02-01 01:02:01 3
11 6 exit 2014-02-01 01:02:31 3
[12 rows x 4 columns]
我认为现在更容易推断…
然后,您可以按会话ID和页面进行分组:
In [14]: g = df.groupby(['id', 'page']) # perhaps use as_index=False
获得所需结果的一种方法是使用应用程序,例如通过以下功能:
def get_load_and_exit(x):
assert len(x) == 2 # otherwise, logic should be about pairs (?)
return pd.Series(x['timestamp'].values, x['event'])
In [16]: res = g.apply(get_load_and_exit)
In [17]: res
Out[17]:
event load exit
id page
1 1 2014-01-01 00:00:01 2014-01-01 00:00:31
2 2 2014-01-01 00:01:01 2014-01-01 00:01:31
3 3 2014-01-01 00:02:01 2014-01-01 00:02:31
4 1 2014-02-01 01:00:01 2014-02-01 01:00:31
5 2 2014-02-01 01:01:01 2014-02-01 01:01:31
6 3 2014-02-01 01:02:01 2014-02-01 01:02:31
[6 rows x 2 columns]
假设这些是时间戳*,您可以简单地减去以下各列:
In [18]: res['duration'] = res['exit'] - res['load']
In [19]: res
Out[19]:
event load exit duration
id page
1 1 2014-01-01 00:00:01 2014-01-01 00:00:31 00:00:30
2 2 2014-01-01 00:01:01 2014-01-01 00:01:31 00:00:30
3 3 2014-01-01 00:02:01 2014-01-01 00:02:31 00:00:30
4 1 2014-02-01 01:00:01 2014-02-01 01:00:31 00:00:30
5 2 2014-02-01 01:01:01 2014-02-01 01:01:31 00:00:30
6 3 2014-02-01 01:02:01 2014-02-01 01:02:31 00:00:30
[6 rows x 3 columns]
*有必要确保timestamp列实际上是datetime列(不是atm!):
df['timestamp'] = pd.to_datetime(df['timestamp'])
内容总结
以上是互联网集市为您收集整理的在使用python / pandas DataFrame计算值之前验证行全部内容,希望文章能够帮你解决在使用python / pandas DataFrame计算值之前验证行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。