如何在熊猫中编写高效的多准则搜索功能?

时间:2019-04-26 18:43:59

标签: python pandas parallel-processing vectorization vlookup

我有一个这样的数据框。

enter image description here

我想在zipdiv列中搜索并获得type并将该结果应用于所有唯一的zip。一种枢轴函数,但返回实际值而不是聚合函数。(假设zipdiv只有一种组合)

df1 = pd.DataFrame(list(product(list(range(100,200)), ['A','B','C','D','E'])), columns=['zip', 'div'])
df1 = df1.drop(df1.index[np.random.randint(0,499,size=100)]).reset_index()
df1['type'] = np.random.choice(['P','Q','R'],size=df1.shape[0])

我尝试了apply / lambda函数,但是它非常慢。我的数据在df1中包含50万行,其中有41K个唯一的zip和15个唯一的div s

是否有一种有效的方法来获得如下所示的结果。

enter image description here

df2 = pd.DataFrame({'zip':[100,101],'A':['Q','P'],'B':['Q','Q'],'C':['Q','P'],'D':['Q','R'],'E':['Q','P']})

假设邮政编码是非数字的。

2 个答案:

答案 0 :(得分:2)

另一种解决方案,如果您想使用数据透视表:

df_pivot=df.pivot_table(index='zip',columns=['div'],aggfunc='first')

答案 1 :(得分:1)

尝试:

m=df.groupby('zip')['type'].apply(list)
n=pd.DataFrame(m.values.tolist(),columns=df['div'].unique(),index=m.index)
print(n)

     A  B  C  D  E
zip               
100  Q  Q  Q  Q  Q
101  P  Q  P  R  P

PS 您不应该将div作为一列,因为这是一个熊猫函数(我建议您将其更改为除div之外的其他内容)