【问题标题】:How to use a column in dataframe as dictionary key value?如何将数据框中的列用作字典键值?
【发布时间】:2022-11-28 14:19:57
【问题描述】:
假设有一个数据集。
假设数据集有一个 A 列,其中包含城市名称,例如“纽约”、“加利福尼亚”或“佛罗里达”
现在我们有一本像这样的字典
my_dict = {"New York":1, "California":2, "Florida":3}
所以我需要生成一个 B 列,如果 A 列的行值为“纽约”,则 B 列的值为 1,如字典中所示。
我使用了 lambda 函数并且它有效,但是是否可以不使用 lambda 函数?
【问题讨论】:
标签:
python
dataframe
dictionary
jupyter-notebook
【解决方案1】:
这看起来很做作但有效:
df = pd.DataFrame([my_dict]).stack().reset_index()
df.drop(df.columns[[0]], axis=1, inplace=True)
df.columns = ['A', 'B']
并给出
A B
0 New York 1
1 California 2
2 Florida 3
【解决方案2】:
方法一
import pandas as pd
my_dict = {"New York":1, "California":2, "Florida":3}
# creating dataframe from dictionary itself, for reproducing the scenario
existing_df = pd.DataFrame({"reference_column" : my_dict.keys()})
# duplicate the reference column (city column)
existing_df["value_column"] = existing_df["reference_column"]
# replace the values in duplicate column with corresponding values from dictionary
existing_df.replace({"value_column" : my_dict}, inplace = True)
解释 :
df.replace({'column' : replacement_dictionary}) 是一种 find and replace 技术。 find 将列的值与 replacement_dictionary 的键进行比较。如果键匹配,则其值用于替换列的现有值
方法二
import pandas as pd
my_dict = {"New York":1, "California":2, "Florida":3}
# reproducing original dataframe with reference city column
existing_df = pd.DataFrame({"reference_column" : my_dict.keys()})
# dictionary coverted into dataframe
replacement_df = pd.DataFrame({"reference_column" : my_dict.keys(), "value_column" : my_dict.values()})
# left join both on city column with original df as left table
merge_df = existing_df.merge(replacement_df, on = ["reference_column"], how = "left")
解释 :
字典可以转换为数据框(replacement_df),其中键作为一列,值作为另一列。此转换后的数据框可以与现有数据框合并,条件是现有数据框中的城市名称应与 replacement_df 中的城市名称相匹配
两种方法的输出: