首先,我有一个熊猫数据框,其中包含以下列: 具有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个半小时。我们可以做些什么来使其更快?
答案 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)