我有两个熊猫数据框,第一个是命名源,其中我们具有ID和名称(ID,用户名)
import timeit
format = """
def format(name, age):
return (
f'He said his name is '
f'{name} and he is '
f'{age} years old.'
)
""", """
def format(name, age):
return (
'He said his name is '
f'{name} and he is '
f'{age} years old.'
)
"""
test = """
def test():
for name in ('Fred', 'Barney', 'Gary', 'Rock', 'Perry', 'Jackie'):
for age in range (20, 200):
format(name, age)
"""
for fmt in format:
print(timeit.timeit('test()', fmt + test, number=10000))
[out]:
3.4188902939995387
3.3931472289996236
第二个名为data_code,其中我们也只有unsernames(0)列和一个code列,我将尝试在其中获取ID。
source.head()
我所做的是创建一个函数,该函数将在两个数据框中查找相同的用户名,并从源数据框中获取用户名的ID,如果不存在,则会生成一个随机ID。在我的解决方案中,我试图创建一个字典,其中只有唯一的值。
data_code.head()
然后我将使用此功能用ID填充字典
uniqueIDs = data_code[0].unique()
FofToID= {}
输出如下:
我的问题是for i in range(len(uniqueIDs)):
if uniqueIDs[i] in list(source["username"]):
FofToID[uniqueIDs[i]]= np.float_(source[source["username"]==i]["id"])
else:
FofToID[uniqueIDs[i]]= int(random.random()*10000000)
数据框中存在的所有值都获得值Series([],名称:id,dtype:float64)。我试图解决此问题,但失败了。
答案 0 :(得分:1)
使用merge
进行左连接,对于不存在的值id
使用fillna
,最后由set_index
和to_dict
创建Series
:< / p>
source = pd.DataFrame({'id':[111111,222222,666666,888888], 'username':['aa','ss','dd','ff']})
data_code = pd.DataFrame({'code':[0]*4, 0:['ss','dd','rr','yy']})
FofToID = (data_code.merge(source, left_on=0, right_on='username', how='left')
.fillna({'id': int(random.random()*10000000)})
.set_index(0)['id']
.to_dict()
)
print (FofToID)
{'ss': 222222.0, 'dd': 666666.0, 'rr': 367044.0, 'yy': 367044.0}
答案 1 :(得分:0)