【问题标题】:Merging Dataframes with Pandas on LEFT or RIGHT在左侧或右侧将数据框与 Pandas 合并
【发布时间】:2019-01-09 06:05:49
【问题描述】:
entity_data = {'STATE_CD_E': ['NY', 'NY', 'NY'],
           'INTERMEDIATE_NUMBER_E': ['1111', '2222', '3333'],
           'DISTRICT_NUMBER_E': ['123456789012', '123412341234', 
           '121212121212'],
           'FINANCE_NUMBER_E': ['123456', '123412', '121212']  }

df_entity = pd.DataFrame(entity_data, index = ['School_1', 'School_2', 
            'School_3'])

finance_data = {'STATE_CD_F': ['NY', 'NY', 'NY'],
           'INTERMEDIATE_NUMBER_F': ['1111', '2222', '3333'],
           'DISTRICT_NUMBER_F': ['123456', '123412', '121212']  }

df_finance = pd.DataFrame(finance_data, index = ['School_1', 'School_2', 
             'School_3'])

print("\n")
print(df_entity)
print("\n")
print(df_finance)
print("\n")
print("\n")
print("\n")



df_merge = pd.merge(df_entity, df_finance[['INTERMEDIATE_NUMBER_F', 
           'DISTRICT_NUMBER_F']], right_on = ['DISTRICT_NUMBER_F'], left_on= 
           ['FINANCE_NUMBER_E'], how='left')

上面是我正在使用的代码。我正在尝试使用熊猫合并两个数据框。但是,我想在 DISTRICT_NUMBER_E 的左侧 6 位数字上加入 DISTRICT_NUMBER_F。有没有办法做到这一点?如果没有,我是否可以在 entity_data 数据框中创建一个新列,该列采用 DISTRICT_NUMBER_E 的左 6 位数字,然后在该列上进行匹配?

【问题讨论】:

    标签: sql python-3.x pandas dataframe merge


    【解决方案1】:

    您可以像这样合并前六位数字:

    df_entity.merge(df_finance, left_on=df_entity.DISTRICT_NUMBER_E.str[:6],
                    right_on='DISTRICT_NUMBER_F')
    
      DISTRICT_NUMBER_E FINANCE_NUMBER_E INTERMEDIATE_NUMBER_E STATE_CD_E  \
    0      123456789012           123456                  1111         NY   
    1      123412341234           123412                  2222         NY   
    2      121212121212           121212                  3333         NY   
    
      DISTRICT_NUMBER_F INTERMEDIATE_NUMBER_F STATE_CD_F  
    0            123456                  1111         NY  
    1            123412                  2222         NY  
    2            121212                  3333         NY  
    

    【讨论】:

    • 当我运行您提供给我的代码时,它不会拉入 DISTRICT_NUMBER_F。
    • @Taylor,这段代码没有做什么?你希望这段代码不做什么?
    • 不,你是对的。我正在打印原始的 df_entity。我将它设置为一个新变量,然后将其打印出来,并让您的输出匹配。这样可行。谢谢!
    【解决方案2】:
    # create a key which satisfy the condition for joining the dataframes
    df_entity['key'] = df_entity['DISTRICT_NUMBER_E'].str[:6]
    
    # join the both dataframe using the new key into one merged dataframe
    # optional use caluse how = 'left'/'right'/'outer' for specific join
    merged_df = pd.merge(df_entity, df_finance, left_on='key', right_on='DISTRICT_NUMBER_F')
    
    # optional: dorp the key if not needed anymore
    merged_df.drop('key', axis=1, inplace=true)
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    • @Nic3500 感谢您的关注。我对代码添加了一些说明。
    猜你喜欢
    • 2019-12-28
    • 1970-01-01
    • 2011-12-28
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2015-04-05
    相关资源
    最近更新 更多