Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
Pandas Python将根据在另一个数据帧中的查找向数据帧添加列_Pandas_Dataframe - Fatal编程技术网

Pandas Python将根据在另一个数据帧中的查找向数据帧添加列

Pandas Python将根据在另一个数据帧中的查找向数据帧添加列,pandas,dataframe,Pandas,Dataframe,我有一个DF/每个NBA球队的第一场和最后一场比赛的日期。在每场比赛前后,我都有另一个DF/球队的ELO。我想在指定的第一个和最后一个日期向DF1添加两列,包括团队的ELO。对于第一列中的日期,我想要ELO1,第二列中的日期我想要ELO2。如果有办法将2个ELO之间的差异直接转化为1列,那就更好了,因为这是我最终要计算的 DF1: first last team ATL 2017-10-18 2018-04-10 BOS 2017-10-17

我有一个DF/每个NBA球队的第一场和最后一场比赛的日期。在每场比赛前后,我都有另一个DF/球队的ELO。我想在指定的第一个和最后一个日期向DF1添加两列,包括团队的ELO。对于第一列中的日期,我想要ELO1,第二列中的日期我想要ELO2。如果有办法将2个ELO之间的差异直接转化为1列,那就更好了,因为这是我最终要计算的

DF1:

         first      last
team        

ATL 2017-10-18  2018-04-10

BOS 2017-10-17  2018-04-11

BRK 2017-10-18  2018-04-11

CHI 2017-10-19  2018-04-11
[...]
          date      team       ELO_before        ELO_after
65782 2017-10-18  ATL        1648.000000  1650.308911

65783 2017-10-17  BOS        1761.000000  1753.884111

65784 2017-10-18  BRK        1427.000000  1439.104231

65785 2017-10-19  CHI        1458.000000  1464.397752

65786 2018-04-10  ATL        1406.000000  1411.729285
[...]
DF2:

         first      last
team        

ATL 2017-10-18  2018-04-10

BOS 2017-10-17  2018-04-11

BRK 2017-10-18  2018-04-11

CHI 2017-10-19  2018-04-11
[...]
          date      team       ELO_before        ELO_after
65782 2017-10-18  ATL        1648.000000  1650.308911

65783 2017-10-17  BOS        1761.000000  1753.884111

65784 2017-10-18  BRK        1427.000000  1439.104231

65785 2017-10-19  CHI        1458.000000  1464.397752

65786 2018-04-10  ATL        1406.000000  1411.729285
[...]
提前谢谢

编辑-我想要的结果数据框如下所示:

DF3:


您可以为此使用
pandas.DataFrame.merge

import pandas as pd

# frames from the question
df1 = pd.DataFrame(data={
  'team': ['ATL', 'BOS', 'BRK', 'CHI'],
  'first': ['2017-10-18', '2017-10-17', '2017-10-18', '2017-10-19'],
  'last': ['2018-04-10', '2018-04-11', '2018-04-11', '2018-04-11']
}).set_index('team')

df2 = pd.DataFrame(data={
  'date': ['2017-10-18', '2017-10-17', '2017-10-18', '2017-10-19', '2018-04-10'],
  'team': ['ATL', 'BOS', 'BRK', 'CHI', 'ATL'],
  'ELO_before': [1648.0, 1761.0, 1427.0, 1458.0, 1406.0],
  'ELO_after': [1650.308911, 1753.884111, 1439.104231, 1464.397752, 1411.729285]
})

# merge on first and last
df1.reset_index(inplace=True)
df3 = df1.merge(df2.drop('ELO_after', axis=1), how='left', left_on=['team', 'first'], right_on=['team', 'date']).drop(['date'], axis=1)
df3 = df3.merge(df2.drop('ELO_before', axis=1), how='left', left_on=['team', 'last'], right_on=['team', 'date']).drop(['date'], axis=1)

# calculate the differences
df3['ELO_difference'] = df3['ELO_after'] - df3['ELO_before']
df3.set_index('team', inplace=True)

你能用你想要的结果数据框的样本来编辑这个问题吗?@nijm刚刚添加了我正在寻找的结果数据框。提前谢谢!