我想知道是否有一种更有效的方法来实现excel中流行的“index&match”类型函数。例如-给定两个pandas数据帧,使用在df_2中找到的信息更新df_1:
import pandas as pd
df_1 = pd.DataFrame({'num_a':[1, 2, 3, 4, 5],
'num_b':[2, 4, 1, 2, 3]})
df_2 = pd.DataFrame({'num':[1, 2, 3, 4, 5],
'name':['a', 'b', 'c', 'd', 'e']})
我正在处理在df_1和df_2中都有大约80000行的数据集,我的目标是在df_1中创建两个新列“name_a”和“name_b”。
下面是我能想到的最有效的方法。那里有更好的方法!
name_a = []
name_b = []
for i in range(len(df_1)):
name_a.append(df_2.name.iloc[df_2[
df_2.num == df_1.num_a.iloc[i]].index[0]])
name_b.append(df_2.name.iloc[df_2[
df_2.num == df_1.num_b.iloc[i]].index[0]])
df_1['name_a'] = name_a
df_1['name_b'] = name_b
导致:
>>> df_1.head()
num_a num_b name_a name_b
0 1 2 a b
1 2 4 b d
2 3 1 c a
3 4 2 d b
4 5 3 e c
我认为有一个比已经提出的更直接的解决方案。既然你提到了Excel,这是一个基本的vlookup。您可以使用Series.map在pandas中模拟此过程。
我们所做的就是把df_2转换成一个dict,并用num作为键。map函数从dict的df_1列中查找每个值并返回相应的字母。不需要复杂的索引。
高水平
replace
中使用的词典replace
、rename
列和join
分解
使用字典应该很快。有很多方法可以构建字典表单
df_2
。实际上,我们可以使用pd.Series
。我选择用dict
和zip
构建,因为我发现它更快。建筑
m
选项1
选项2
选项3
选项4(我的选择)
m
构建时间替换
num
再说一次,我们有很多选择,这里有一些选择。
我选择。。。
重命名列
加入
只需尝试一个条件语句:
相关问题 更多 >
编程相关推荐