如何优化以下代码以使其运行更快?

时间:2019-09-11 08:12:38

标签: python-3.x pandas dataframe optimization python-3.7

首先,我有一个熊猫数据框,其中包含以下列: 具有180万行的“ YEAR”,“ 1DIGIT”,“ 2DIGITS”,“ 3DIGITS”,“ SIZE”,“ CODE”,“ VALUE”。 这是我的代码来更正我拥有的数据:

for year in list(data.YEAR.unique()):
    data1 = data[data.YEAR == year]
        for dig in list(data1.3DIGITS.unique()):
            data2 = data1[data1.3DIGITS == dig]
            for size in list(data2.SIZE.unique()):
                data3 = data2[data2.SIZE == size]
                data.loc[(data.YEAR == year)&(data.3DIGITS == dig)&(data.CODE == 9122),"VALUE") = data3[data3.CODE.isin(9001,9057)].VALUE.sum()

如您所见,我想对代码9001和9057的值求和并将其分配给代码9122的值。此方法有效,但速度很慢,几乎需要1个半小时。我们可以做些什么来使其更快?

1 个答案:

答案 0 :(得分:2)

尝试使用熊猫的groupby功能。

这看起来像:

def add_col(df):
    df.loc[(df.CODE == 9122),"VALUE") = df[df.CODE.isin(9001,9057)].VALUE.sum()
    return df

data.groupby(['YEAR', '3DIGITS', 'SIZE']).apply(add_col)