【发布时间】:2014-11-17 01:35:07
【问题描述】:
我有两个数据框。 DF1 包含以下内容:
用户 |时间间隔
用户01 | [01/01/2014 08:12:00, 01/01/2014 08:13:43]
用户02 | [01/03/2014 07:21:44, 01/04/2014 01:07:01]
DF 2 包含事件:
用户 |时间 |价值
用户01 | 01/03/2014 04:11:00 | 9
用户01 | 2014 年 1 月 1 日 08:10:00 | 12
用户02 | 2014 年 1 月 3 日 09:11:00 | 3
用户02 | 2014 年 1 月 2 日 011:10:00 | 21
我想根据 DF2 中的事件向 DF1 添加 3 列,包含时间间隔内每个用户的平均值、标准差和最大值。
所以最终的结果应该是这样的:
用户 |时间间隔 |平均值 |最大 |标准差
用户01 | [01/01/2014 08:12:00, 01/01/2014 08:13:43] |钠 |钠 |南
用户02 | [01/03/2014 07:21:44, 01/04/2014 01:07:01] | 3 | 3 | 0
如果我的表很大,有什么有效的方法来做到这一点?基于另一个数据帧的时间间隔是否有某种“groupby”函数?
代码:
import pandas as pd
DF1 = pd.DataFrame({'User' : pd.Series(["User01", "User02"], index=['1', '2']), 'Time start' : pd.Series(["01/01/2014 08:12:00", "01/03/2014 07:21:44"], index=['1', '2']),'Time end' : pd.Series(["01/01/2014 08:13:43", "01/04/2014 01:07:01"], index=['1', '2'])})
DF2 = pd.DataFrame({'User' : pd.Series(["User01","User01","User02", "User02"], index=['1', '2','3','4']), 'Time' : pd.Series(["01/03/2014 04:11:00", "01/01/2014 08:10:00","01/03/2014 09:11:00","01/02/2014 011:10:00"], index=['1', '2','3', '4']),'Value' : pd.Series([9,12,3,21], index=['1', '2','3','4'])})
DF3 = pd.DataFrame({'User' : pd.Series(["User01", "User02"], index=['1', '2']), 'Time start' : pd.Series(["01/01/2014 08:12:00", "01/03/2014 07:21:44"], index=['1', '2']),'Time end' : pd.Series(["01/01/2014 08:13:43", "01/04/2014 01:07:01"], index=['1', '2']),'Mean' : pd.Series(["Nan", 3], index=['1', '2']),'Max' : pd.Series(["Nan", 3], index=['1', '2']),'StDev' : pd.Series(["Nan", 0], index=['1', '2'])})
【问题讨论】:
-
拥有可复制粘贴的示例很有帮助。还要通过您提供的示例发布您预期的解决方案应该是什么样子。这应该可以通过将您的
Time interval列分成两部分来实现,一个低端和一个高端,然后在第二个数据帧上使用类似between_time的东西。 -
谢谢。您能具体说明一下复制可粘贴示例的含义吗?
-
你说你的数据框是什么样的,但你没有提供创建它们的代码。这意味着任何试图帮助您的人都必须首先编写代码来创建这些数据帧。复制和粘贴代码以达到现在的状态要容易得多,而不是浪费时间尝试重新创建数据结构。尝试对您的对象执行 df.to_dict(),然后发布
DF1 = pandas.DataFrame({'User': ...})等代码,而不仅仅是用文字描述您拥有的内容。 -
首先你应该清理你的帧,一个好的开始是将你的时间间隔的开始和结束提取为日期时间列。尚不清楚用户是否是唯一的(您是否只关心某个时间间隔内的行为?如果是,那会让事情变得更容易。)
-
知道了。添加了生成 DF 的代码。开始和结束时间也分开。现在查看 between_time。
标签: python pandas large-data