【问题标题】:How to optimize merging only on lines matching a condition?如何仅在符合条件的行上优化合并?
【发布时间】:2023-02-20 17:37:42
【问题描述】:

我想在 a 列上左合并 df_1 和 df_2

我可以通过以下方式轻松存档:

df_3 = df_1.merge(df_2, on="a", how="left")

但是,我知道当df_1.b == 0时,我永远不会在df_2中找到a

因此,为了优化我的代码,我只想在 df_1.b != 0 时将 df_1 与 df_2 合并

我怎样才能更有效地了解这些信息来获得 df_3?

输入

d = {'a': list('ABCDEF'),                                                                           
     'b': list('111000')}                                                                           
df_1 = pd.DataFrame(data=d)                                                                         
                                                                                                    
#    a  b                                                                                           
# 0  A  1                                                                                           
# 1  B  1                                                                                           
# 2  C  1                                                                                           
# 3  D  0                                                                                           
# 4  E  0                                                                                           
# 5  F  0                                                                                           
                                                                                                    
d = {'a': list('ABC'),                                                                              
     'c': list('xyz')}                                                                              
df_2 = pd.DataFrame(data=d)                                                                         
                                                                                                    
#    a  c                                                                                           
# 0  A  x                                                                                           
# 1  B  y                                                                                           
# 2  C  z                                                                                           

预期产出

df_3                                                                                                
                                                                                                    
#    a  b    c                                                                                      
# 0  A  1    x                                                                                      
# 1  B  1    y                                                                                      
# 2  C  1    z                                                                                      
# 3  D  0  NaN                                                                                      
# 4  E  0  NaN                                                                                      
# 5  F  0  NaN                                                                                      

【问题讨论】:

  • merge 已经在内部进行了这项检查,你可能不会通过预过滤获得太多性能

标签: pandas optimization merge


【解决方案1】:

IIUC 使用:

m = df_1.b != 0
df_3 = df_1[m].merge(df_2, on="a", how="left")

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 1970-01-01
    • 2021-12-08
    • 2021-03-12
    • 1970-01-01
    • 2017-12-06
    • 2012-09-17
    • 1970-01-01
    • 2017-04-12
    相关资源
    最近更新 更多