![](/img/trans.png)
[英]Merge 2 dataframe on index with different timestamp in python pandas
[英]Python - Pandas - Merge two DataFrame with difference timestamp frequencies
我有兩個數據框: - 第一個有一個帶有秒或亞秒時間步長的時間戳列, - 第二個有一個帶有 1 分鍾時間步長的時間戳列。
現在很明顯,如果數據時間間隔相同,由於數據頻率不同,兩個數據幀將具有不同的大小。
我想使用例如更高頻率(即最長)的數據幀將它們合並到一個數據幀中,並以這樣的方式將它們放在旁邊(水平)另一個以獲得當前時間戳的正確數據。 這意味着最低頻率的數據幀數據將根據當前的分鍾數據值重復自己。
我希望下面的例子能讓事情更清楚:
數據框 1
|--------------------------|------------------|
| datetime | ValueDF1 |
|--------------------------|------------------|
| 2019-12-11 12:00:16.599 | 1 |
|--------------------------|------------------|
| 2019-12-11 12:00:16.17 | 2 |
|--------------------------|------------------|
| 2019-12-11 12:00:17.11 | 3 |
|--------------------------|------------------|
數據框 2
|--------------------------|------------------|
| datetime | ValueDF2 |
|--------------------------|------------------|
| 2019-12-11 12:00 | 4 |
|--------------------------|------------------|
合並
|--------------------------|------------------|-----------------|
| datetime | ValueDF1 | ValueDF2 |
|--------------------------|------------------|-----------------|
| 2019-12-11 12:00:16.599 | 1 | 4 |
|--------------------------|------------------|-----------------|
| 2019-12-11 12:00:16.17 | 2 | 4 |
|--------------------------|------------------|-----------------|
| 2019-12-11 12:00:17.11 | 3 | 4 |
|--------------------------|------------------|-----------------|
有什么建議? 提前致謝。
假設 'datetime' 列都是 Pandas 日期時間格式,我們可以去掉 df1['datetime'] 的秒數並使用這個新字段進行合並。
df1['datetime_min'] = pd.to_datetime([dt.datetime.strftime(d, "%Y-%m-%d %H:%M") for d in df1["datetime"]])
df1.merge(df2,left_on='datetime_min', right_on='datetime', how='left')
這對你有用嗎?
你有沒有檢查pd.merge_asof()
。 希望這可以幫助:
pd.merge_asof(df1.sort_values('datetime'), df2.sort_values('datetime'))
輸出:
datetime ValueDF1 ValueDF2
0 2019-12-11 12:00:16.170 2 4
1 2019-12-11 12:00:16.599 1 4
2 2019-12-11 12:00:17.110 3 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.