Python/Pandas:如果值iis等于不同列中的不同行,如何选择一列中的行?
以下是我的数据示例:Python/Pandas:如果值iis等于不同列中的不同行,如何选择一列中的行?,python,pandas,dataframe,Python,Pandas,Dataframe,以下是我的数据示例: In[177]:df_data[['Date', 'TeamName', 'Opponent', 'ScoreOff']].head() Out[177]: Date TeamName Opponent ScoreOff 4128 2005-09-08 00:00:00 New England Patriots Oakland Raiders 30 412
In[177]:df_data[['Date', 'TeamName', 'Opponent', 'ScoreOff']].head()
Out[177]:
Date TeamName Opponent ScoreOff
4128 2005-09-08 00:00:00 New England Patriots Oakland Raiders 30
4129 2005-09-08 00:00:00 Oakland Raiders New England Patriots 20
4130 2005-09-11 00:00:00 Arizona Cardinals New York Giants 19
4131 2005-09-11 00:00:00 Baltimore Ravens Indianapolis Colts 7
4132 2005-09-11 00:00:00 Buffalo Bills Houston Texans 22
对于每一行,我需要设置一个新列['OpponentScoreOff'],该列等于该队对手当天的得分
我基本上是通过以下步骤来完成的,但是速度很慢,我觉得有一种更具pythonic/矢量化的方法来完成
g1 = df_data.groupby('Date')
for date, teams in g1:
g2 = teams.groupby('TeamName')
for teamname, game in teams:
df_data[(df_data['TeamName'] == teamname) & (dfdata['Date'] == date)]['OppScoreOff'] = df_data[(df_data['Opponent'] == teamname) & (df_data['Date'] == date)]['ScoreOff']
它起作用了,但速度很慢。有更好的方法吗?您可以使用sort在任何给定日期利用TeamName和对手之间的双射。考虑以下事项:
import pandas as pd
import numpy as np
df_data = df_data.sort(['Date', 'TeamName'])
opp_score = np.array(df_data.sort(['Date', 'Opponent'])['ScoreOff'])
df_data['OpponentScoreOff'] = opp_score
数组调用是删除数据帧索引所必需的。这样,一旦将数组放回df_数据中,就不会重新调用它