首页 > 解决方案 > 将 pandas 数据框值与字典键进行比较,然后将该字典中的值插入到新列中

问题描述

相对较新的 python/pandas 用户在这里。我在 A 列中有一个包含数千个值的数据框,索引到 Account_num。

ID_num  A
A300    37
B400    82
T500    10
...     ...

还有另一个数据框,在 M 列中有大约 300 个值。N 列中的每个值都显示在第一个数据框的 A 列中,每列数百/数千次。对于这些值中的每一个,都有平均值、中位数和众数。

M   Mean  Median  Mode
99  2.3   7.0     9.9
37  3.6   6.6     0.2
10  4.1   4.2     8.1
82  1.9   7.7     5.0
... ...   ...     ...

我正在寻找的输出将是这样的:

ID_num  A   Mean  Median  Mode
A300    37  3.6   6.6     0.2
B400    82  1.9   7.7     5.0
T500    10  4.1   4.2     8.1
...     ... ...   ...     ...

到目前为止,我的研究已将我指向 .map 函数,我将在其中将第二个表 (M) 转换为字典,然后将其映射到第一个表中的列。但是,我无法理解它是如何工作的,以及我需要写什么来确保正确的值进入正确的列。我还没有为此写一个完整的 if 语句......但我不确定这是否是正确的方向。

任何想法或研究领域将不胜感激!

标签: pythonpandasdictionary

解决方案


该线程可能有助于您了解有关该map功能的更多信息: Using python map and other functional tools

但是,对于您的特定问题, amerge可能是一个更简洁的选择。

import pandas as pd 

df1 = pd.DataFrame({'ID_num': ['A300', 'B400', 'T500'], 'A': [37, 82, 10]})
df2 = pd.DataFrame({'M': [99, 37, 10, 82], 
                    'Mean': [2.3, 3.6, 4.1, 1.9],
                    'Median': [7.0, 6.6, 4.2, 7.7],
                    'Mode': [9.9, 0.2, 8.1, 5.0]})


pd.merge(df1, df2, how='left', left_on='A', right_on='M').drop('M', axis=1)

输出:

  ID_num   A  Mean  Median  Mode
0   A300  37   3.6     6.6   0.2
1   B400  82   1.9     7.7   5.0
2   T500  10   4.1     4.2   8.1

推荐阅读