【问题标题】:How to write an efficient multiple criteria search function in pandas?如何在 pandas 中编写高效的多条件搜索功能?
【发布时间】:2019-09-16 07:22:09
【问题描述】:

我有一个这样的数据框。

我想在 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 中包含 500K 行,其中 41K 唯一 zips 和 15 个唯一 divs

有没有一种有效的方法可以得到如下结果。

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

假设 zip 不是数字。

【问题讨论】:

标签: python pandas parallel-processing vectorization vlookup


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    尝试:

    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作为一个列,因为这是一个pandas函数(我建议你把它改成除div之外的其他东西) p>

    【讨论】:

    • 由于某种原因,我在真实数据上遇到错误。 13 columns passed, passed data had 187 columns 在计算 n 时
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    相关资源
    最近更新 更多