簡體   English   中英

Python Dataframes 合並多匹配

[英]Python Dataframes merge multi match

我是 Dataframe 的新手。我想知道如何(如果可能的話)將 2 個數據幀與多個匹配項合並例如

[df1]

date                  ZipCode Weather
2022-11-25 00:00:00   123456   34
2022-11-25 00:00:15   123456   35
2022-11-25 00:00:30   123456   36
[df2]
date                  ZipCode   host
2022-11-25 00:00:00   123456   host1
2022-11-25 00:00:00   123456   host2
2022-11-25 00:00:00   123456   host3
2022-11-25 00:00:15   123456   host1
2022-11-25 00:00:30   123456   host2
2022-11-25 00:00:30   123456   host3

預期成績:

date                  ZipCode   host   Weather
2022-11-25 00:00:00   123456   host1   34
2022-11-25 00:00:00   123456   host2   34
2022-11-25 00:00:00   123456   host3   34
2022-11-25 00:00:15   123456   host1   35
2022-11-25 00:00:30   123456   host2   36
2022-11-25 00:00:30   123456   host3   36

我的目標是為每個主機分配天氣措施。 我每 15 分鍾對一個郵政編碼(一行)進行一次天氣測量,另一方面,我一次有幾個主機 KPI 和一個郵政編碼(多行)

我可以使用 Dataframes 執行此活動嗎?

提前致謝!

您可以使用 pandas 中的連接 function 將一個數據幀的索引連接到另一個數據幀的索引。 嘗試類似的東西

import pandas as pd

data1 = \
[['2022-11-25 00:00:00',  123456, 34],
['2022-11-25 00:00:15',  123456, 35],
['2022-11-25 00:00:30',  123456, 36]]

columns1 =['date', 'ZipCode', 'Weather']

data2 = \
[['2022-11-25 00:00:00',  123456, 'host1'],
['2022-11-25 00:00:00',  123456, 'host2'],
['2022-11-25 00:00:00',  123456, 'host3'],
['2022-11-25 00:00:15',  123456, 'host1'],
['2022-11-25 00:00:30',  123456, 'host2'],
['2022-11-25 00:00:30',  123456, 'host3']]

columns2 =['date', 'ZipCode', 'host']

df1 = pd.DataFrame(data=data1, columns=columns1)
df1.date = pd.to_datetime(df1.date)
df1.set_index('date', inplace=True)
df2 = pd.DataFrame(data=data2, columns=columns2)
df2.date = pd.to_datetime(df2.date)
df2.set_index('date', inplace=True)
df3 = df1.join(df2['host'], on='date')
df3

我們通過使用merge並將參數on['date', 'ZipCode']來做到這一點:

new_df = pd.merge(df2, df1, on=['date', 'ZipCode'])

Output

>>> new_df
...      date           ZipCode host    Weather
0   2022-11-25 00:00:00 123456  host1   34
1   2022-11-25 00:00:00 123456  host2   34
2   2022-11-25 00:00:00 123456  host3   34
3   2022-11-25 00:00:15 123456  host1   35
4   2022-11-25 00:00:30 123456  host2   36
5   2022-11-25 00:00:30 123456  host3   36

經過幾次測試,我得到了預期的結果

new_df2 = pd.merge(df1, df2, on=['date', 'ZipCode'], how='right')

謝謝你的指導!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM