不重复:
引用的答案映射字典中的值以替换包含等于该字典中的键的值的列。我的问题是关于将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'])
才能保留它们?
谢谢。
答案 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)