如何用字典列表键替换数据帧列值



Supose我有一本字典:

dic = {'1' : ['A', 'B', 'C'], '2' : ['D', 'E'] , '3' : ['F']}

和数据帧

df = pd.DataFrame()
df["ID"] = pd.Series(["A","B","C","D","E","F"])
df["Colour"] = pd.Series(["Blue","Purple","Green","Red","Pink","Black"])

如何用字典键替换df["ID"]列中的值,以便在df["ID"]中有1,2,3,而不是A、B、C、D、E、F?

感谢

反转字典和map:

d = {v:k for k,l in dic.items() for v in l}
# {'A': '1', 'B': '1', 'C': '1', 'D': '2', 'E': '2', 'F': '3'}
df['ID'] = df['ID'].map(d)

注意。如果列表中有重复的值,则最后看到的值将优先

输出:

ID  Colour
0  1    Blue
1  1  Purple
2  1   Green
3  2     Red
4  2    Pink
5  3   Black

您可以用字典映射df,但您需要还原字典的关键字/值:

new_dic = {}
for k,v in dict.items():
for x in v:
new_dic.setdefault(x,[]).append(k)

然后你可以简单地映射你的列:

df["ID"].map(new_dic)

你可以参考这个问题:

用dict重映射pandas列中的值,保留NaNs

这个:

使用列表值反转字典

最新更新