繁体   English   中英

Python function 类似于 ZE1E1D3D40573127D6ZEE04 中的“滚动” function

[英]Python function similar to "Roll" function in R

我想在滚动日期加入两个表,如下所示。 是否可以像在 R 中那样在 Python 中做同样的事情? 我没有在网上找到任何在 Python 中进行滚动连接的示例。 提前致谢。

sales <- data.table(
  SaleId = c("S1", "S2", "S3", "S4", "S5"),
  SaleDate = as.Date(c("2014-2-20", "2014-5-1", "2014-6-15", "2014-7-1", "2014-12-31"))
)
sales



commercials <- data.table(
  CommercialId = c("C1", "C2", "C3", "C4"),
  CommercialDate = as.Date(c("2014-1-1", "2014-4-1", "2014-7-1", "2014-9-15"))
)
commercials


setkey(sales, "SaleDate")
setkey(commercials, "CommercialDate")

commercials[sales, roll = TRUE]


output:-
##    CommercialId CommercialDate   RollDate SaleId   SaleDate
## 1:           C1     2014-01-01 2014-02-20     S1 2014-02-20
## 2:           C2     2014-04-01 2014-05-01     S2 2014-05-01
## 3:           C2     2014-04-01 2014-06-15     S3 2014-06-15
## 4:           C3     2014-07-01 2014-07-01     S4 2014-07-01
## 5:           C4     2014-09-15 2014-12-31     S5 2014-12-31

pd.merge_asof可以在最近的日期合并,如果需要,可以使用可选参数来控制方向。

import pandas as pd
sales = pd.DataFrame({
  'SaleId':["S1", "S2", "S3", "S4", "S5"],
  'SaleDate': pd.to_datetime(["2014-2-20", "2014-5-1", "2014-6-15", "2014-7-1", "2014-12-31"])
})


commercials = pd.DataFrame({
      'CommercialId':["C1", "C2", "C3", "C4"],
      'CommercialDate':pd.to_datetime(["2014-1-1", "2014-4-1", "2014-7-1", "2014-9-15"])
})

pd.merge_asof(sales, commercials, left_on='SaleDate', right_on='CommercialDate')

Output

  SaleId   SaleDate CommercialId CommercialDate
0     S1 2014-02-20           C1     2014-01-01
1     S2 2014-05-01           C2     2014-04-01
2     S3 2014-06-15           C2     2014-04-01
3     S4 2014-07-01           C3     2014-07-01
4     S5 2014-12-31           C4     2014-09-15

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM