python - 根据共享列的另一个数据框中的列映射 pandas 数据框中的新列

标签 python python-3.x pandas dataframe

正如 Pandas 问题通常那样,很难想出一个足够简洁的标题,这样人们就可以知道我在问什么,而又不会太长,但希望它足够了。我将提供一个简单的示例来说明我正在尝试做什么,因为我当前的工作数据集非常大。

考虑以下简单的数据框:

df = pd.DataFrame([[0, 5 ],
                   [1, 10],
                   [2, 20],
                   [0, 10],
                   [1, 0 ],
                   [2, 15]], columns = ["ID", "val"])

这会创建以下数据框df:

   ID  val
0   0    5
1   1   10
2   2   20
3   0   10
4   1    0
5   2   15

我想获取此数据帧并附加一个新列,该新列是我称为 df_map 的另一个数据帧的列的映射值,例如如下所示:

df_map = pd.DataFrame([[0,10],
                       [1,20],
                       [2,30]], columns = ["ID", "new_val"])

最终的数据框应如下所示:

   ID  val  new_val
0   0    5       10
1   1   10       20
2   2   20       30
3   0   10       10
4   1   20       20
5   2   30       30

映射函数应该简单地查看df中ID列的值,并根据df_map中给定的值分配一个新列

也许这可以通过 pandas 中的 .groupby.map 函数的组合来完成,但我还没有弄清楚如何实现。

任何提示将不胜感激。

最佳答案

您可以使用Series.map :

df['new_val'] = df.ID.map(df_map.set_index('ID').squeeze())

输出

   ID  val  new_val
0   0    5       10
1   1   10       20
2   2   20       30
3   0   10       10
4   1    0       20
5   2   15       30

请注意 squeeze df_map.set_index('ID').squeeze() 将 DataFrame 转换为 Series。

关于python - 根据共享列的另一个数据框中的列映射 pandas 数据框中的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58877358/

相关文章:

python - 使用 mca 和 Prince 模块在 Python 中使用非二进制分类虚拟变量进行多重对应分析

python - 检查JSON(对象属性存在)是否打印为unicode解码

python - Matplotlib 副标题打印在旧副标题上

python - 将自定义数据传递给 request_futures 中的异常

python - 用 turtle 画三角形

python - Pandas dropna 在 MultiIndex 上无法按预期工作

python - 如何强制 for 循环计数器在 Python3 中跳过迭代?

python - 如何将2个pandas数据框中的2列彼此相乘

python-3.x - 在使用 ipdb ResourceWarning 进行 unitest 时调试 python 代码

python - Pandas bool 索引与两个列表的比较 : Same (? ) 方法,不同的结果