【发布时间】:2018-08-28 11:38:36
【问题描述】:
谁能帮助我了解如何使用def whatever() 创建函数而不是使用for 循环。我正在尝试更多地以 Python 方式做事,但并不真正了解如何很好地应用函数而不是循环。例如,我在下面有一个运行良好的循环并给出了我想要的输出,有没有办法用函数来做到这一点?
seasons = leaguesFinal['season'].unique()
teams = teamsDF['team_long_name'].unique()
df = []
for i in seasons:
season = leaguesFinal['season'] == i
season = leaguesFinal[season]
for j in teams:
team_season_wins = season['win'] == j
team_season_win_record = team_season_wins[team_season_wins].count()
team_season_loss = season['loss'] == j
team_season_loss_record = team_season_loss[team_season_loss].count()
df.append((j, i, team_season_win_record, team_season_loss_record))
df = pd.DataFrame(df, columns=('Team', 'Seasons', 'Wins', 'Losses'))
输出如下:
Team Seasons Wins Losses
0 KRC Genk 2008/2009 15 14
1 Beerschot AC 2008/2009 11 14
2 SV Zulte-Waregem 2008/2009 16 11
3 Sporting Lokeren 2008/2009 13 9
4 KSV Cercle Brugge 2008/2009 14 15
【问题讨论】:
-
为什么一个简单的循环不应该是“pythonical”?您也可以编写一个循环函数,但在这种情况下可读性不强,您的循环可以很好地理解正在发生的事情。这是 Python 的主要目标之一。
-
hmm.. 您可以使用数据帧 progress_apply 方法来迭代您的数据帧。这肯定会删除一个 for 循环(可能都取决于你如何定义你的函数)以及提高执行速度。
-
另一个问题:我不明白这段代码如何在第 6 行和第 7 行工作。
leaguesFinal['season'] == i总是返回一个布尔值。在下一行中,您使用这个布尔值作为__getitem__的参数。这将导致KeyError除非您拥有给定布尔值的键。 -
@SvenKrüger 我不知道为什么它不返回密钥错误?对不起。我猜你对“pythonical”的事情是对的,我正在研究这个,因为我的导师说我使用循环太多,应该尝试更多地使用函数
-
@Cut7er 完美,我会让他知道的;p
标签: python pandas function loops for-loop