【问题标题】:Pandas merge tables with two columns in commonPandas 合并具有两列共同的表
【发布时间】:2021-03-15 10:16:17
【问题描述】:

我正在研究两个大数据库:

数据M

数据D

我想join CountyStateYear 的两个数据框,但是 dataM 必须保留所有列,并且只获得数据的剥夺指数百分比D。另外,我想drop 一个或另一个上不存在县的行。例如,在 dataM 上我们有 AK 及其县,但在 dataD 上没有 AK,所以我想 drop dataM 上的所有这些行。同样,如果县和州同时存在,我想将剥夺指数百分比分配给该县在该州的所有行。我尝试了所有方法,但我无法让它工作。

我尝试了多种形式:

dataM = pd.merge(dataM, dataD, how='right', left_on=['County', 'State'], right_on=['County', 'State'])

通过过滤两个数据框上的鲍德温县,我得到了这个:

如果县和州都存在于两个数据框中,我不明白为什么我会得到 NaN。请帮帮我。

【问题讨论】:

  • 问题似乎是你使用右连接,使用左连接即 how='left' 即 dataM = pd.merge(dataM, dataD, how='left', on=['County', '状态'])
  • 它显示了县和州的正确数据,但 Dep Index 仍然显示 NaN
  • 对于数据框 dataD 中没有匹配国家和州的数据行,剥夺索引将为 NaN
  • 是的,我对此进行了测试:dataM = dataM[dataM['County'] == 'Baldwin County']
  • 用两个数据框上的鲍德温县过滤结果,它不应该返回 NaN

标签: python pandas dataframe jupyter-notebook jupyter


【解决方案1】:

我认为你需要一个内部连接 ​​-

dataM = pd.merge(dataM, dataD[['depr_ind_col', 'County', 'State']], how='inner', left_on=['County', 'State'], right_on=['County', 'State'])

【讨论】:

  • 我已经解决了它走不同的路线。如果您想知道我做了什么,我发布了我为什么这样做作为答案。不过谢谢你:)
【解决方案2】:

经过多次尝试,我最终将县和州连接到 dataM 并将其分配给新列名称“县,州”。然后,我只是使用了一个简单的合并方法:

dataM = pd.merge(dataM , dataD, how='right', on=['County, State']) 
dataM = dataM[dataM['County, State'] == 'Baldwin County, GA']
dataM

这给了我 a 正在寻找的结果。之后我将拆分县和州,然后在 Births 上删除带有 NaN 的行。

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2014-09-28
    • 2021-02-24
    • 2020-12-23
    • 2016-01-21
    • 2015-03-21
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多