我有以下DF:
<表类>
游戏
公司
Over1.5
Under1.5
Over2.25
Under2.25
Over2.5
Under2.5
Over3
Under3
tbody><<tr>A和B Asianodds 1, 2 3、4 2, 1 4 1 3, 1 4, 7 3, 3 4 9 A和B 顶峰 1, 2 3、4 2, 1 4 0 3, 1 4, 6 3, 3 4 9 表类>
你的代码基本上是正确的,只是有点乱。我试着让它更简洁明了。因此,假设您的原始DataFrame有两行,称为df
,下面是我的代码:
for i in o_u_types:
asian_over = df.at[0, f"Over{i}"]
asian_under = df.at[0, f"Under{i}"]
pin_over = df.at[1, f"Over{i}"]
pin_under = df.at[1, f"Under{i}"]
if asian_over > pin_over:
df[f"overdominant{i}"] = "AsianDominant"
elif asian_over < pin_over:
df[f"overdominant{i}"] = "PinDominant"
else:
df[f"overdominant{i}"] = "Parity"
...REST OF CODE LOGIC
我强烈建议使用f-string:例如,用f"Over{i}"
代替"Over{}".format(i)
。还建议使用else
来完成每组if
-elif
语句。在您的例子中,由于if
和elif
分别测试>
和<
,因此else
必然是==
。
试着看看这是否对你有帮助。
你可以把你的数据框转置,这样做:
df = df.T
df.loc[df[0] > df[1],'over_dominance'] = 'AsianDominant'
df.loc[df[0] < df[1],'over_dominance'] = 'PinDominant'
df.loc[df[0] == df[1],'over_dominance'] = 'Parity'
print (df)
可以忽略前两行(Game and Bookmaker)
输出如下:
0 1 over_dominance
Game A vs B A vs B Parity
Bookmaker Asianodds Pinnacle PinDominant
Over1.5 1,2 1,2 Parity
Under1.5 3,4 3,4 Parity
Over2.25 2,1 2,1 Parity
Under2.25 4,1 4,0 AsianDominant
Over2.5 3,1 3,1 Parity
Under2.5 4,7 4,6 AsianDominant
Over3 3,3 3,3 Parity
Under3 4,9 4,9 Parity
这可能不是最终的答案,但我试图给你一些选择来考虑。