Python 使用特定行和列计算滚动和
我有一个相当具体的问题 我试图分析一些历史足球数据,并想创建一个列,每个球队最近的主客场进球数,例如。我试图简化这里的内容,假设Python 使用特定行和列计算滚动和,python,pandas,Python,Pandas,我有一个相当具体的问题 我试图分析一些历史足球数据,并想创建一个列,每个球队最近的主客场进球数,例如。我试图简化这里的内容,假设df如下所示: df = pd.DataFrame({'Home':['A','B','C','B','A','A','C'],'Away':['B','C','A','C','B','B','A'], 'HG':[1,2,3,2,1,4,1],'AG':[2,4,5,1,3,2,2]}) Home Away HG AG 0
df
如下所示:
df = pd.DataFrame({'Home':['A','B','C','B','A','A','C'],'Away':['B','C','A','C','B','B','A'],
'HG':[1,2,3,2,1,4,1],'AG':[2,4,5,1,3,2,2]})
Home Away HG AG
0 A B 1 2
1 B C 2 4
2 C A 3 5
3 B C 2 1
4 A B 1 3
5 A B 4 2
6 C A 1 2
Home Away HG AG Expected_Home
0 A B 1 2 6.0
1 B C 2 4 5.0
2 C A 3 5 2.0
3 B C 2 1 5.0
4 A B 1 3 6.0
5 A B 4 2 NaN
6 C A 1 2 NaN
我想做的是对df中每一行的主场和客场的最近两个目标数(HG
和/或AG
)求和。但我显然不想考虑最近的争吵
所以,如果我们看索引行0。家是“A”。我希望得到的数字是6,在AG下的索引行2中有5个是客队,在索引行4中有1个是主队,总共相等于6。对于索引行0中的客场B队,我希望结果是索引行1和索引行3中的4。等等如果要计算的数据点少于2个,我还想返回np.NaN
我最初想写一个小函数来帮助实现这一点,类似的东西,但显然这是非常不正确的:
def get_rolling_sum(x):
count_list = []
new_df = df[(df['Home'] == str(x)) | (df['Away'] == str(x))]
for i in range(0,len(new_df)):
if new_df['Home'].iloc[i] == str(x):
count_list.append(new_df['HG'].iloc[i])
elif new_df['Away'].iloc[i] == str(x):
count_list.append(new_df['AG'].iloc[i])
df['Roll_Home'] = [get_rolling_sum(x) for x in df['Home']]
我希望得到的是这样的东西:
df = pd.DataFrame({'Home':['A','B','C','B','A','A','C'],'Away':['B','C','A','C','B','B','A'],
'HG':[1,2,3,2,1,4,1],'AG':[2,4,5,1,3,2,2]})
Home Away HG AG
0 A B 1 2
1 B C 2 4
2 C A 3 5
3 B C 2 1
4 A B 1 3
5 A B 4 2
6 C A 1 2
Home Away HG AG Expected_Home
0 A B 1 2 6.0
1 B C 2 4 5.0
2 C A 3 5 2.0
3 B C 2 1 5.0
4 A B 1 3 6.0
5 A B 4 2 NaN
6 C A 1 2 NaN
非常感谢首先,让我们向数据帧添加一列,以便行索引可用。然后创建一个堆叠的dataframe,以便Home和Away列成为单个列,HG和AG列成为单个列,同时保持索引的完整性。基本上,原始df的Home和Away值将成为两个连续的行。然后从堆叠的数据框中选取引用索引大于原始索引的最近两行,并添加目标。(必须手动设置最后两行)
首先,让我们向数据帧添加一列,以便行索引可用。然后创建一个堆叠的dataframe,以便Home和Away列成为单个列,HG和AG列成为单个列,同时保持索引的完整性。基本上,原始df的Home和Away值将成为两个连续的行。然后从堆叠的数据框中选取引用索引大于原始索引的最近两行,并添加目标。(必须手动设置最后两行)
谢谢你的帮助,似乎已经做了这个把戏。谢谢你的帮助,似乎已经做了这个把戏