Python 熊猫队比较棒球比赛的一排分数
我试图创建两列:Run_diff作为Run differential和二进制win/loss列 到目前为止,我能做的最好的事情是: 设置奇偶列以尝试和分组游戏以进行分析Python 熊猫队比较棒球比赛的一排分数,python,pandas,Python,Pandas,我试图创建两列:Run_diff作为Run differential和二进制win/loss列 到目前为止,我能做的最好的事情是: 设置奇偶列以尝试和分组游戏以进行分析 df = pd.DataFrame({'Date': [402, 402, 402, 402, 403, 403, 404, 404], 'Team' : ['SFO', 'ARI', 'CUB', 'STL', 'NYY', 'SEA', 'OAK', 'LAA'],
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]})
尝试获取一行分数,以便更轻松地加减
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)
这将创建此新的\u df
:
Date Team1 Team2 Final1 Final2
0 402 SFO ARI 4 6
1402立方STL 2 5
2403纽约海7 2
3404橡树LAA 1 2
那么很容易:
new_df = pd.DataFrame(
{
"Date": df["Date"].iloc[::2].values,
"Team1": df["Team"].iloc[::2].values,
"Team2": df["Team"].iloc[1::2].values,
"Final1": df["Final"].iloc[::2].values,
"Final2": df["Final"].iloc[1::2].values,
}
)
您可以按奇数行和偶数行重新编制索引 计算两个团队在一行中的跑差和赢差 然后通过堆叠和重新索引将数据返回到初始顺序
将熊猫作为pd导入
df=pd.DataFrame({'Date':[402402402402402403403404404],
‘团队’:[‘SFO’、‘ARI’、‘CUB’、‘STL’、‘NYY’、‘SEA’、‘橡木’、‘LAA’],
“最终版本”:[4,6,2,5,7,2,1,2]})
#基于奇偶行重新索引
新建_df=df.set_索引([df.index//2,df.index%2])。取消堆栈()
#计算两个方向的运行差异
新测向['Run_Diff',0]=新测向['Final',0]-新测向['Final',1]
新测向['Run_Diff',1]=新测向['Final',1]-新测向['Final',0]
#计算两个方向的赢与输
新测向['Win\u Loss',0]=(新测向['Run\u Diff',0]>0)
新测向['Win\u Loss',1]=(新测向['Run\u Diff',1]>0)
#删除多索引,更改列顺序
新的_df=(
新的测向堆栈(1)
.reset_index(drop=True)[“日期”、“团队”、“决赛”、“输赢”、“跑动差异”]]
)
打印(新文档)
输出:
new_df["run_diff"] = new_df["Final1"] - new_df["Final2"]
new_df["win_loss"] = (new_df["run_diff"] < 0).astype(int)
print(new_df)
您能编辑您的问题并将预期结果放在那里吗?完成。希望它能为你澄清我的问题对不起,我刚刚意识到这不起作用。它实际上并没有将数据保持在整洁的数据格式中。这将使执行统计分析变得困难,因为信息不容易归属于该行中的单个团队。我相信我能做到,但我认为分析对我来说会很困难。也许一个更有经验的数据分析师不会有问题,但我认为这会使这种形式的分析变得更加困难。我最终想看看我是否能预测一支球队在不同日期的最终记录和最终跑动差异总数(30场比赛后,60场比赛后,等等)在棒球赛季中。@ChasedCribet如果你想在一列中返回球队,请查看
pd.melt
等。例如pd.melt(df,id\u vars=[“Team1”],value\u vars=[“Final1”,“Final2”])
。我正在考虑使用melt。我没有太多的经验,但这对我来说是一个很好的练习机会。另一方面,我在这里看到了很多你的答案,特别是关于网络抓取的问题。我想让你知道我非常感谢你的贡献。如果你曾经参与过辅导网站和API工作来帮助像我这样的人更好地获得我们的约会,请告诉我。我将排在第一位。谢谢你,亨利。这真的很有帮助,它将帮助我研究我的数据操作弱点。主要是修改索引,然后了解如何使用多索引数据集。非常感谢。
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