pandas 假设你有两张表格,一张叫做df1,另一张叫df2,都包含姓名(Name)和时间戳(Timestamp)字段,需要对df1和df2按进行姓名和时间戳进行匹配,df1时间戳匹配的时候按前后范围15天寻找df2的时间戳
时间: 2024-12-23 20:24:29 浏览: 3
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
在Pandas中,你可以使用`merge`函数结合`rolling`窗口来实现这种跨表数据的匹配,假设你需要找到df1中的每个姓名在最近15天内的df2记录。以下是步骤:
1. 首先,确保两个DataFrame的索引(Timestamp列)都是日期类型,并且已经排序过。
```python
df1.set_index('Timestamp', inplace=True)
df2.set_index('Timestamp', inplace=True)
```
2. 对于df1,创建一个滚动窗口(rolling window),比如16天(包括当前天),这样可以获取到每个名字在过去的15天内的所有数据。
```python
window = df1['Timestamp'].rolling(window=16).min()
window_df = df1.join(window.rename('last_date_in_window'))
```
这里的`last_date_in_window`列包含了每个姓名在最近15天内时间戳的最小值。
3. 现在可以在df1上做一次左连接(left merge),查找df2中在这15天范围内有对应时间戳的数据。
```python
merged = pd.merge_asof(df1, df2, left_on='Timestamp', right_index=True, tolerance=pd.Timedelta(days=15))
```
`tolerance`参数设置为15天,表示允许df2的时间戳在df1指定的过去15天内。
4. 结果`merged`将是一个新的DataFrame,其中包含了df1的所有行和df2在这15天范围内的匹配记录。
阅读全文