我有一個字典,鍵是日期時間,值是那天的資料幀,如下所示:
dict = {dt.datetime(2021,11,1):pd.DataFrame({'team':['horses','eagles'],
'rating':[15,20]}),
dt.datetime(2021,11,2):pd.DataFrame({'team':['horses','eagles'],
'rating':[35,50]})}
{datetime.datetime(2021, 11, 1, 0, 0):
team rating
0 horses 15
1 eagles 20,
datetime.datetime(2021, 11, 2, 0, 0):
team rating
0 horses 35
1 eagles 50}
我還有一個單獨的資料框,帶有日期時間列和同一行中這些團隊的名稱,如下所示:
df = pd.DataFrame({'date':[dt.datetime(2021,11,1),dt.datetime(2021,11,2)],
'team_1':'horses',
'team_2':'eagles'})
date team_1 team_2
0 2021-11-01 horses eagles
1 2021-11-02 horses eagles
我想要做的是遍歷字典,以便如果 datetime 鍵與 df 的日期列中的日期匹配,則從值中獲取資料并將其合并到 df 中的團隊以創建最終資料框,像這樣:
date team_1 team_1_rating team_2 team_2_rating
0 2021-11-01 horses 15 eagles 20
1 2021-11-02 horses 35 eagles 50
我嘗試遍歷字典并將資料與以下代碼合并:
for key, value in dict.items:
if key == df['date']:
final_df = pd.merge(df,value,left_on = ['team_1','team_2'], right_on = 'team')
但我得到一個錯誤
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我不太確定這是否是一個好方法,但任何幫助將不勝感激!!
uj5u.com熱心網友回復:
錯誤就在這里:
if key == df['date']:
它說這是模棱兩可的,因為實際上,它不知道要與哪個單元格進行比較。
例如:
x = '2021-11-01'
if x == df['date']:
print ("hola")
它會給你那個錯誤。
所以,你需要遍歷 df.iloc
uj5u.com熱心網友回復:
您的問題是線路if key == df['date']沒有按照您的想法行事。您正在比較 key(它是一個日期時間物件)是否與 相同df['date'],它是一個pandas.Series. 由于這兩個物件都沒有一個str,int,float等,巨蟒試圖比較bool各兩個的。當您嘗試獲取boola時會引發此例外pandas.Series。
您可以使用 for 回圈來遍歷 中的每個值df['data'],但更簡潔的方法是使用loc(此處為檔案)的內置 Pandas 功能。
import datetime as dt
import pandas as pd
import numpy as np
my_dict = {dt.datetime(2021,11,1):pd.DataFrame({'team':['horses','eagles'],
'rating':[15,20]}),
dt.datetime(2021,11,2):pd.DataFrame({'team':['horses','eagles'],
'rating':[35,50]})}
df = pd.DataFrame({'date':[dt.datetime(2021,11,1),dt.datetime(2021,11,2)],
'team_1':'horses',
'team_2':'eagles'})
# Searching for key match in df
for key, value in my_dict.items():
df.loc[df['date'] == key, 'team_1_rating'] = value['rating'][0]
df.loc[df['date'] == key, 'team_2_rating'] = value['rating'][1]
# Reordering columns to match desired output
col_list = list(df)
col_list[2], col_list[3] = col_list[3], col_list[2]
df.columns = col_list
print(df)
請注意,底部塊只是重新排序您的資料幀以匹配您想要的輸出。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/358172.html
下一篇:python會計算洗掉的專案嗎?
