Python遍历两个数据框架并找到相似的列



我目前正在做一个项目,我的目标是获得每场NCAA男子篮球比赛的比赛分数。为了做到这一点,我需要使用python包sportsreference。我需要使用两个数据帧,一个名为df,包含游戏日期,另一个名为box_index(如下所示),包含每个游戏的唯一链接。我需要得到由每个游戏的唯一链接所取代的日期列。这些唯一的链接以日期开始(格式与df的日期列完全相同),这使得使用regex或.contains()更容易做到这一点。我一直得到Keyerror: 0错误。有人能帮我弄清楚下面我的逻辑有什么问题吗?

from sportsreference.ncaab.schedule import Schedule

def get_team_schedule(name):
combined =Schedule(name).dataframe  
box_index = combined["boxscore_index"]
box = box_index.to_frame()
#print(box)
for i in range(len(df)):
for j in range(len(box)):
if box.loc[i,"boxscore_index"].contains(df.loc[i, "date"]):
df.loc[i,"date"] = box.loc[i,"boxscore_index"]

get_team_schedule("Virginia") 

看起来像"box"one_answers";df"由于要遍历所有行,因此使用iterrows(而不是使用".loc"按索引搜索)

可能更有效。
for i, row_df in df.iterrows():
for j, row_box in box.iterrows():
if row_box["boxscore_index"].contains(row_df["date"]):
df.at[i, 'date'] = row_box["boxscore_index"]

".at"函数将覆盖给定单元格中的值

只是告诉你,iterrows比.loc.更有效,但是itertuples大约快10倍,zip大约快100倍。

Keyerror: 0 error表示您无法在索引0处获得该行,因为使用box.loc[i,"boxscore_index"]没有索引值为0(索引值是日期,例如'2020-12-22-14-virginia')。你可以使用.iloc.,就像box.iloc[i]["boxscore_index"]一样。你必须把所有的.loc转换成那个

就像另一个帖子说的,我不会走那条路。我甚至不会在这里使用迭代行。我将把box_index放入一个列表中,然后遍历它。然后使用pandas来过滤df数据框。我对df看起来像什么做了一些假设,所以如果这不起作用,或者不是你想做的,请分享df的一些示例行:
from sportsreference.ncaab.schedule import Schedule

def get_team_schedule(name):
combined = Schedule(name).dataframe  
box_index_list = list(combined["boxscore_index"])
for box_index in box_index_list:
temp_game_data = df[df["date"] == boxscore_index]
print(box_index)
print(temp_game_data,'n')
get_team_schedule("Virginia") 

相关内容

  • 没有找到相关文章

最新更新