Python else语句中的NaN
请告诉我为什么函数在Python else语句中的NaN,python,pandas,if-statement,Python,Pandas,If Statement,请告诉我为什么函数在else语句中返回我NaN 目标是在并没有最后一场比赛的情况下得到整个赛季球队所有进球的平均值。如果这个赛季只有一场比赛,我想把那场比赛的进球还回去 DF: 预期产出: HOME AWAY SEASON HOME_GOALS AWAY_GOALS HOME_GOALS_LAST_SEASON Team 1 Team 2 2020 1 1 2 (1+3)/2 Team 3 Team 4 2020 2 3
else
语句中返回我NaN
目标是在并没有最后一场比赛的情况下得到整个赛季球队所有进球的平均值。如果这个赛季只有一场比赛,我想把那场比赛的进球还回去
DF:
预期产出:
HOME AWAY SEASON HOME_GOALS AWAY_GOALS HOME_GOALS_LAST_SEASON
Team 1 Team 2 2020 1 1 2 (1+3)/2
Team 3 Team 4 2020 2 3 2
Team 1 Team 3 2019 4 1 4
Team 1 Team 4 2020 3 2 2 (1+3)/2
df.insert(loc = 1, column ="HOME_GOALS_LAST_SEASON", value = 99.9 )
def last_season(team):
if len(team["HOME_GOALS"] > 1):
return team["HOME_GOALS"].iloc[:-1].mean()
else:
return team["HOME_GOALS"].iloc[0]
df = df.set_index(["HOME", "SEASON"])
df["HOME_GOALS_LAST_SEASON"] = df.groupby(["HOME", "SEASON"]).apply(last_season)
df = df.reset_index()
你为什么要把你的生活复杂化?如果只有一场比赛,那么平均值就是它的分数 无需使用
if
-else
那你的命令呢
df["HOME_GOALS_LAST_SEASON"] = df.groupby(["HOME", "SEASON"]).apply(last_season)
取代
df["HOME_GOALS_LAST_SEASON"] = df.groupby(["HOME", "SEASON"])["HOME_GOALS"].mean()
(并删除函数定义)。而不是
def last_season(team):
if len(team["HOME_GOALS"] > 1):
return team["HOME_GOALS"].iloc[:-1].mean()
else:
return team["HOME_GOALS"].iloc[0]
使用
不要使用.apply()
而使用.agg()
-仅适用于的“家庭目标”
列:
df["HOME_GOALS_LAST_SEASON"] = df.groupby(["HOME", "SEASON"])["HOME_GOALS"].agg(last_season)
.agg()
方法连续接收单个列(一系列)作为其参数,而.apply()
则接收整个数据帧。显示df
中的内容示例。问题是,我希望在没有最后匹配的情况下获得平均值(如果有2个以上匹配)。因此我使用.iloc[:-1]。如果只有一个匹配,那么我得到NaN。当只有一个匹配时仍然返回NaN。问题是您没有提供示例数据帧,所以我没有测试代码。没有它,我觉得没有必要继续。对不起,我错过了第一条评论。我将编辑原始帖子。
def last_season(team):
if len(team) > 1):
return team.iloc[:-1].mean()
else:
return team.iloc[0]
df["HOME_GOALS_LAST_SEASON"] = df.groupby(["HOME", "SEASON"])["HOME_GOALS"].agg(last_season)