![](/img/trans.png)
[英]Pandas populate new dataframe column based on matching columns in another 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.