繁体   English   中英

基于共享列的另一个 dataframe 中的列映射 pandas dataframe 中的新列

[英]Mapping a new column in a pandas dataframe based on columns in another dataframe which share a column

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

考虑以下简单的 dataframe:

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

这将创建以下 dataframe df

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

我想把这个 dataframe 和 append 作为一个新列,它是另一个 dataframe 的列的映射值,我调用df_map如下所示:

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

因此,最终的 dataframe 应如下所示:

   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

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

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

任何提示将非常感谢。

您可以使用Series.map

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

Output

   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

请注意, df_map.set_index('ID').squeeze() 挤压将 DataFrame 转换为系列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM