【发布时间】:2019-07-03 07:54:40
【问题描述】:
我有一个嵌套循环。但是我的数据集非常大,所以我需要一个更快的方法。我相信它可以通过以某种巧妙的方式对数据进行分组或映射来完成。 我有一个 X 名称列表。对于每个名称,我都有由颜色、品牌和价值组成的项目。 我需要对每个名称的颜色和品牌的每个组合的值求和。然后对这些和进行一些操作,首先在每个颜色内,然后在每个名称内,同时跟踪计算总和的组合。 嵌套的 for 循环变得非常慢,因为我的数据集很大。 有更快的方法吗?
import random
import pandas
list1 = ['Name 0']
list2 = ['Color 0']
list3 = ['Brand 0']
list4 = [random.randint(10,1000)]
nName = 25
nColor = 5
nBrand = 3
nSim = 1000
for i in range(1,nSim):
list1.extend(['Name {}'.format(random.randint(0,nName))])
list2.extend(['Color {}'.format(random.randint(0,nColor))])
list3.extend(['Brand {}'.format(random.randint(0, nBrand))])
list4.append(random.randint(10,1000))
d = list(zip(list1, list2, list3, list4))
df1 = pd.DataFrame(d, columns=['Name','Color','Brand','Value'])
end_values = np.zeros(nName)
for iName in range(0,nName):
y = 0
for iColor in range(0,nColor):
x = np.zeros(nBrand)
for iBrand in range(0,nBrand):
x[iBrand] = np.nansum(df1[((df1['Name'] == 'Name {}'.format(iName)) & (df1['Color'] == 'Color {}'.format(iColor)) & (df1['Brand'] == 'Brand {}'.format(iBrand)))]['Value'])
y = y + x[0] + 1.5 * x[1] + 3 * x[0] * x[2]
end_values[iName] = y
【问题讨论】:
标签: python for-loop nested pandas-groupby