python - Pandas 在可变列上合并

标签 python pandas

我有一张土地覆盖率表和州的站点表。我有另一个表,其值链接到类和状态。但是,在第二个表中,某些行仅链接到类:

sites = pd.DataFrame({'id': ['a', 'b', 'c'],
                      'class': [1, 2, 23],
                      'state': ['al', 'ar', 'wy']})

values = pd.DataFrame({'class': [1, 1, 2, 2, 23],
                       'state': ['al', 'ar', 'al', 'ar', None],
                       'val': [10, 11, 12, 13, 16]})

我想按类和状态链接表,但值表中那些状态为None的行除外,在这种情况下,它们仅按类链接。

合并具有以下结果:
combined = sites.merge(values, how='left', on=['class', 'state'])

  id  class state   val
0  a      1    al  10.0
1  b      2    ar  13.0
2  c     23    wy   NaN

但是我希望将最后一行的val设为16。是否有一种廉价的方法来做到这一点,只需分解两个表,执行单独的合并,然后将结果串联起来?

最佳答案

如何分别合并它们:

pd.concat([sites.merge(values, on=['class','state']),
           sites.merge(values[values['state'].isna()].drop('state',axis=1),
                       on=['class'])
          ])

输出:
  id  class state  val
0  a      1    al   10
1  b      2    ar   13
0  c     23    wy   16

关于python - Pandas 在可变列上合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59395161/

相关文章:

python - 使用类来组织共享输入的函数是否合适?

python - 仅在堆叠条形顶部添加总值

python - 从分组列中另一个 DataFrame 的每一行创建 DataFrame?

python - 当我在 pycharm 和终端中运行代码时得到不同 o/p 的原因是什么?

python - 如何使用 Django 加速 PostgreSQL 数据库中的正则表达式查询

python - 加速 CSV 更新/导入 Django 模型

python - 如何在 pyspark 机器学习中使用 Dataframe?

python - 为 Scikit-Learn 向量化 Pandas 数据框

python - 最后一行的 Pandas 是否满足特定条件?

python - "feature_importances_"在 Scikit-learn 的 RandomForestRegressor 中是如何排序的