我有两个数据框,一个是按日期排序的球队和得分列表,第二个是带有日期的单个球员。在这些数据帧中,我有60列匹配的统计数据,我正在尝试用一个代码来替换df2中每列的值,用df1之前的日期中对手的平均值:
df1: df2:
date team scr name team opp date scr
0 2016-04-03 KCR 5.70 0 Erasmo Ramirez TBR TOR 2016-04-06 7.90
1 2016-04-03 NYM 4.70 1 Erasmo Ramirez TBR BAL 2016-04-10 1.30
2 2016-04-03 PIT 6.30 2 Erasmo Ramirez TBR CLE 2016-04-13 9.30
3 2016-04-03 STL 3.40 etc...
4 2016-04-03 TBR 4.80
5 2016-04-03 TOR 6.20*
6 2016-04-04 ARI 7.40
7 2016-04-04 ATL 5.30
8 2016-04-04 BAL 7.00
9 2016-04-04 CHC 9.60
10 2016-04-04 TOR 7.50*
etc...
因此,在本例中,df2中“scr”下的第一个条目将从7.90更改为6.85,因为这是4-6(4-3和4-4)之前日期TOR的平均scr
我尝试了以下方法(以及其他类似的方法),但没有成功:
jf = df1.groupby('team')
df2['scr'] = jf.apply(lambda x: x[(df1['date']<x['date'])&(df1['team']==x['opp'])]['scr'].sum())
ValueError: Series lengths must match to compare
有什么解决办法吗?还有一种可能的方法是用一块代码遍历所有的列,还是每个列都要有代码?你知道吗
我找到了一个解决方案,也许不是很优雅,我会检查回来,以防有人真的看到这个,并有一个更好的。我创建了一个列标题列表,然后使用iterrows遍历列中的每一列和每一行:
相关问题 更多 >
编程相关推荐