Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/Pandas:如果值iis等于不同列中的不同行,如何选择一列中的行?_Python_Pandas_Dataframe - Fatal编程技术网

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_数据中,就不会重新调用它