[英]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.