【发布时间】:2014-08-14 13:05:19
【问题描述】:
我有一个包含 400.000 行和 15 列的 csv 文件。我必须为每一行进行多个过滤操作。所以,我想用 pandas 和 groupby 来尝试提高性能。使用 groupby 很快,但 get_group 似乎很慢。
import pandas as pd
filepath = 'data.csv'
df = pd.read_csv(filepath, sep=',', na_values=['', '-'], parse_dates=True)
groups = df.groupby(['Year', 'Team'])
team_matches = groups.get_group(('2014', 'Barcelona'))
groupby 非常快。但是随着用于分组的列数的增加,get_group 变得非常慢。对于上面的例子,获取组需要 0.6s。
为了澄清,对于我的 csv 中的每一行,我必须根据前几行创建一些统计信息。我的 csv 包含足球数据,其中包含主队、客队、全场得分、每种结果的赔率等列。
一个例子是找出主队的平均进球数。
goal_avg = np.average(df[(df['HOMETEAM'] == hometeam) & (df['LEAGUE'] == league)]['HOME_GOALS'])
【问题讨论】:
-
Groupby 仅定义您是否喜欢组的描述,它不会执行任何分组。数据是否最初排序?