3 回答
TA贡献1805条经验 获得超9个赞
您可以使用map,它可以映射字典或自定义函数中的值。
假设这是您的df:
ID First_Name Last_Name
0 103 a b
1 104 c d
创建字典:
fnames = {103: "Matt", 104: "Mr"}
lnames = {103: "Jones", 104: "X"}
和地图:
df['First_Name'] = df['ID'].map(fnames)
df['Last_Name'] = df['ID'].map(lnames)
结果将是:
ID First_Name Last_Name
0 103 Matt Jones
1 104 Mr X
或使用自定义函数:
names = {103: ("Matt", "Jones"), 104: ("Mr", "X")}
df['First_Name'] = df['ID'].map(lambda x: names[x][0])
TA贡献1821条经验 获得超6个赞
这个问题可能仍然经常被探访,因此值得为卡西斯先生的回答提供补充。可以对dict内置类进行子类化,以便为“缺失”键返回默认值。此机制对熊猫有效。但请参见下文。
这样就可以避免关键错误。
>>> import pandas as pd
>>> data = { 'ID': [ 101, 201, 301, 401 ] }
>>> df = pd.DataFrame(data)
>>> class SurnameMap(dict):
... def __missing__(self, key):
... return ''
...
>>> surnamemap = SurnameMap()
>>> surnamemap[101] = 'Mohanty'
>>> surnamemap[301] = 'Drake'
>>> df['Surname'] = df['ID'].apply(lambda x: surnamemap[x])
>>> df
ID Surname
0 101 Mohanty
1 201
2 301 Drake
3 401
可以通过以下方式更简单地完成同一件事。对于getdict对象的方法使用'default'参数,就不必对dict进行子类化。
>>> import pandas as pd
>>> data = { 'ID': [ 101, 201, 301, 401 ] }
>>> df = pd.DataFrame(data)
>>> surnamemap = {}
>>> surnamemap[101] = 'Mohanty'
>>> surnamemap[301] = 'Drake'
>>> df['Surname'] = df['ID'].apply(lambda x: surnamemap.get(x, ''))
>>> df
ID Surname
0 101 Mohanty
1 201
2 301 Drake
3 401
添加回答
举报