正如 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/