df = pd.DataFrame({'Date': [402, 402, 402, 402, 403, 403, 404, 404],
'Team' : ['SFO', 'ARI', 'CUB', 'STL', 'NYY', 'SEA', 'OAK', 'LAA'],
'Final' :[4, 6, 2, 5, 7, 2, 1, 2]})
df_expected = pd.DataFrame({'Date': [402, 402, 402, 402, 403, 403, 404, 404],
'Team' : ['SFO', 'ARI', 'CUB', 'STL', 'NYY', 'SEA', 'OAK', 'LAA'],
'Final' :[4, 6, 2, 5, 7, 2, 1, 2],
'Win_Loss': [0,1,0,1,1,0,0,1],
'Run_diff': [-2,2,-3,3,5,-5,-1,1]})
我正在尝试创建两列:用于运行差异的 Run_diff 和一个二进制赢/输列。
到目前为止我能做的最好的事情:
设置奇偶列来尝试对游戏进行分组进行分析
df['Test'] = 1
for i, j in enumerate(df['Final']):
if (i % 2) == 0:
df['Test'][i] = 'Even'
else:
df['Test'][i] = 'Odd'
尝试连续获得分数以便更容易加/减
df['Shift'] = df['Final'].shift(fill_value = 0)
尝试使用上面创建的两个列
conditions = [(df['Test'] == 'Odd'),
(df['Test'] == 'Even')]
values = [df['Final'] - df['Shift'], 0]
df['Run_diff'] = np.select(conditions, values)
这对于任何奇数列都适用,这是我尝试将行分组为游戏的尝试。但我不知道如何让偶数列工作。
您不必使用我的代码,因为它不是最优雅的。我确信这一点。我非常愿意为此尝试和应用新的/更好的技术。
谢谢。
最佳答案
您可以按奇数行和偶数行重新索引。
计算单行中两队的 run_diff 和 win_loss。
然后通过堆叠和重新索引将数据返回到其初始顺序。
import pandas as pd
df = pd.DataFrame({'Date': [402, 402, 402, 402, 403, 403, 404, 404],
'Team': ['SFO', 'ARI', 'CUB', 'STL', 'NYY', 'SEA', 'OAK', 'LAA'],
'Final': [4, 6, 2, 5, 7, 2, 1, 2]})
# Re Index Based on Odd And Even Rows
new_df = df.set_index([df.index // 2, df.index % 2]).unstack()
# Calculate Run Diff in Both Directions
new_df['Run_Diff', 0] = new_df['Final', 0] - new_df['Final', 1]
new_df['Run_Diff', 1] = new_df['Final', 1] - new_df['Final', 0]
# Calculate Win Loss in Both Directions
new_df['Win_Loss', 0] = (new_df['Run_Diff', 0] > 0).astype(int)
new_df['Win_Loss', 1] = (new_df['Run_Diff', 1] > 0).astype(int)
# Remove Multi Index, Change Column Order
new_df = (
new_df.stack(1)
.reset_index(drop=True)[['Date', 'Team', 'Final', 'Win_Loss', 'Run_Diff']]
)
print(new_df)
输出:
Date Team Final Win_Loss Run_Diff
0 402 SFO 4 0 -2
1 402 ARI 6 1 2
2 402 CUB 2 0 -3
3 402 STL 5 1 3
4 403 NYY 7 1 5
5 403 SEA 2 0 -5
6 404 OAK 1 0 -1
7 404 LAA 2 1 1
关于python - Pandas 比较棒球比赛的连续得分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67236891/