根据字典键将字典值分配给 DataFrame 列

新手上路,请多包涵

我正在寻找 map value 在一个 DataFrame 的一列中,其中 key 在该列中的第二个 dict 等于

例如:

如果我的命令是:

 dict = {'abc':'1/2/2003', 'def':'1/5/2017', 'ghi':'4/10/2013'}

我的数据框是:

       Member    Group      Date
 0     xyz       A         np.Nan
 1     uvw       B         np.Nan
 2     abc       A         np.Nan
 3     def       B         np.Nan
 4     ghi       B         np.Nan

我想得到以下内容:

       Member    Group      Date
 0     xyz       A         np.Nan
 1     uvw       B         np.Nan
 2     abc       A         1/2/2003
 3     def       B         1/5/2017
 4     ghi       B         4/10/2013

注意: dict 不包含 df 中“成员”下的所有值。如果我映射,我不希望将这些值转换为 np.Nan 。所以我想我必须做一个 fillna(df['Member']) 来保留它们?


使用字典重新映射 pandas 列中的值不同,保留映射字典中的值的 NaN 以替换包含与字典中的键等效的值的列。这是关于根据键值将 dict 值添加到 DataFrame 中的另一个列。

原文由 Windstorm1981 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 849
2 个回答

您可以使用 df.apply 来解决您的问题,其中 d 是您的字典。

 df["Date"] = df["Member"].apply(lambda x: d.get(x))

此代码所做的是获取 Member 列中的每个值,并在您的字典中查找该值。如果在字典中找到该值,则相应的字典值将填充该列。如果该值不在字典中,则 None 将被返回。

此外,请确保您的字典包含有效的数据类型。在您的字典中,键(abc、def、ghi)应表示为字符串,而您的日期应表示为字符串或日期对象。

原文由 vielkind 发布,翻译遵循 CC BY-SA 4.0 许可协议

我只会做一个简单的地图来得到答案。

如果我们有一本字典

d = {abc:1/2/2003, def:1/5/2017, ghi:4/10/2013}

数据框为:

       Member    Group      Date

 0     xyz       A         np.Nan
 1     uvw       B         np.Nan
 2     abc       A         np.Nan
 3     def       B         np.Nan
 4     ghi       B         np.Nan

那么一个简单的地图就可以解决问题。

 df["Date"] = df["Member"].map(d)

map() will lookup the dictionary for value in df['Member'] , and for each value in Member , it will get the Value from dictionary d and将其分配回 Date 。如果该值不存在,它将分配 NaN

我们不需要循环或应用。

原文由 Joe Ferndz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题