Python Pandas根据字典键将字典值分配给数据框列

时间:2018-08-16 16:21:34

标签: python pandas dictionary

不重复:

引用的答案映射字典中的值以替换包含等于该字典中的键的值的列。我的问题是关于将dict值基于键值添加到数据框中的ANOTHER列中。


我对Python dictionary不太熟悉,因此如果这是一个简单的问题,请提前道歉。

我正在将dict中的map value移到数据帧中的一列,而该字典中的key等于该数据帧中的第二列

例如:

如果我的字典是:

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中“ Member”下的所有值。如果我映射,我不希望这些值转换为np.Nan。所以我认为我必须做fillna(df['Member'])才能保留它们?

谢谢。

4 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:2)

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

如果我们有一个字典

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() 将在字典中查找 df['Member'] 中的值,对于 Member 中的每个值,它将从字典 d 中获取值并将其分配回 { {1}}。如果该值不存在,它将分配 Date

我们不需要循环或应用。

答案 2 :(得分:-1)

for i in range(len(df)):
    if df['Member'][i] in d:
        df['Date'][i] = d[df['Member'][i]]

P.S。用保留字(即dict)命名变量是一种不好的做法。

答案 3 :(得分:-1)

只需创建一个新的df,然后加入它们:

map_df = pd.DataFrame(list(zip(map_dict.items()))).set_index(0)
df.merge(map_df, how='left', left_on='Member', right_index=True)