Skip to main content
 首页 » 编程设计

Python:在大数据框中按值选择行

2024年09月07日29duanxz

给定一个数据框 df:

 Column A: [0, 1, 3, 4, 6] 
 
 Column B: [0, 0, 0, 0, 0] 

目标是有条件地替换 B 列中的值。如果 A 列的值存在于集合 assginedToA 中,我们将 B 列中的相应值替换为常量 b .

例如:如果 b=1 且 assignedToA={1,4},则结果为成为

Column A: [0, 1, 3, 4, 6] 
 
Column B: [0, 1, 0, 1, 0] 

我查找 A 值并将 B 值写入其中的代码如下所示:

df.loc[df['A'].isin(assignedToA),'B']=b

此代码有效,但对于巨大的数据帧来说确实很慢。 你有什么建议,如何加快这个过程?


数据框 df 有大约 500 万行,assignedToA 最多有 7 个值。

请您参考如下方法:

您可能会发现通过下拉到 numpy 可以提高性能:

df = pd.DataFrame({'A': [0, 1, 3, 4, 6], 
                   'B': [0, 0, 0, 0, 0]}) 
 
def jp(df, vals, k): 
    B = df['B'].values 
    B[np.in1d(df['A'], list(vals))] = k 
    df['B'] = B 
    return df 
 
def original(df, vals, k): 
    df.loc[df['A'].isin(vals),'B'] = k 
    return df 
 
df = pd.concat([df]*100000) 
 
%timeit jp(df, {1, 4}, 1)        # 8.55ms 
%timeit original(df, {1, 4}, 1)  # 16.6ms