【问题标题】:Pandas Dataframe comparison with range/stdevPandas Dataframe 与 range/stdev 的比较
【发布时间】:2016-09-29 04:50:41
【问题描述】:

我必须使用数据框 A 和 B。两者都有一个“日期时间”列和另一个公共列 X。B 更大,因为它每分钟都有 X,而 A 在一天中的间歇时间只有 X。对于 A 中的每个“日期时间”,我想使用 B 计算前 30 分钟内 X 的范围(或标准差)。所以类似于:

For i,time in enumerate(A['time']): temp=B[(B['time'] > time -timedelta(days=0, minutes=30)) and (B['time'] <=time] range[i]=temp.max-temp.min

这里的 temp 旨在在 A 在 B 中的时间戳之前 30 分钟内对所有数据进行快照。有没有一种简单的方法,也许不需要循环来做到这一点?请注意,A 和 B 的大小不同。

示例 A:(只有少数输出与输入一起可用) Date input output 2015-01-02 20:48:00-00:00 1120 343 2015-01-02 21:25:00-00:00 1345 365

示例 B:(所有输入可用,但没有输出) Date input 2014-11-02 00:32:00-00:00 1542 2014-11-02 00:33:00-00:00 1285

示例输出: Date input output Range_input_previous 30 min 2015-01-02 20:48:00-00:00 1120 343 ??(use table B) 2015-01-02 21:25:00-00:00 1345 365 ??(use table B)

【问题讨论】:

  • 你能提供两个数据框的样本吗?
  • 已添加。让我知道它是否有帮助
  • 你能添加想要的输出吗?
  • 已添加。让我知道它是否有帮助
  • 谢谢。我认为最好的方法是在样本中使用这样的值来返回一些数字。

标签: python pandas dataframe timestamp range


【解决方案1】:

这对我有用,但使用循环:

rangex=np.zeros(A.shape[0])
for i,Date in enumerate(A['Date']): temp=B[(B['Date'] > Date-datetime.timedelta(days=0, minutes=30)) & (B['Date'] <=Date)] rangex[i]=temp['input'].max()-temp['input'].min()
A['range']=pd.Series(rangex, index=A.index)

【讨论】:

    猜你喜欢
    • 2018-11-18
    • 2023-01-11
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 2017-05-14
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多