如何加快大型熊猫数据框的数据标记?

时间:2021-04-19 16:03:38

标签: python pandas dataframe

我有一个大熊猫数据框,大致看起来像这样

  Identity  periods      one        two       three     Label
0   one      1       -0.462407    0.022811  -0.277357
1   one      1       -0.617588    1.667191  -0.370436
2   one      2       -0.604699    0.635473  -0.556088
3   one      2       -0.852943    1.087415  -0.784377
4   two      3        0.421453    2.390097   0.176333
5   two      3       -0.447321   -1.215280  -0.187156
6   two      4        0.398953   -0.334095  -1.194132
7   two      4       -0.324348   -0.842357   0.970825

我需要能够根据各列中的分组对数据进行分类,例如,我的分类标准之一是,如果在 x 和 y 期间之间存在期间列。

我必须对其进行分类的代码如下所示,生成最后一列:

for i in df['Identity'].unique():
    if (2 <= df[df['Identity']==i]['periods'].max() <= 5) :
        df.loc[df['Identity']==i,'label']='label 1'

我也尝试过使用

的版本

df.groupby('Identity').apply().

但这并没有更快。

我的数据目前大约有 280 万行,并且有大约 900 个唯一身份。代码运行大约需要 5 分钟,这表明循环中的代码变慢,而不是循环变慢。

1 个答案:

答案 0 :(得分:1)

让我们尝试通过使用所有矢量化 Pandas 操作来提高系统性能,而不是使用循环或 .apply() 函数,后者也只是通常在内部使用相对较慢的 Python 循环。

使用.groupby().transform()在群内广播max()的{​​{1}},得到制作面具的系列。然后将 periods 与条件 2 <= max <=5 的掩码一起使用,并为满足掩码的行设置标签。

只要组内的最大周期在 2 <= max <=5 之内,就为同一 .loc[] 组的所有行假定相同的标签。

Identity