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
这个:
使用列表值反转字典