我刚接触大数据,正在尝试将一些CSV查找复制到Pandas代码中。在较小的数据集上,我可以不使用嵌套循环。你知道吗
CSV中的查找是这样的:它们遍历datasheet1中的所有行,匹配datasheet2中的两个字段,如果存在匹配项,则设置datasheet1行的值:
=IFERROR(
IF(
ISBLANK(
INDEX(RefTable!$D:$D,MATCH($E6,RefTable!$A:$A,0))
),
"",
INDEX(RefTable!$D:$D,MATCH($E6,RefTable!$A:$A,0))
),
""
)
当我尝试在Pandas中执行此操作时,结果是O(n^2)
操作,它变得非常慢。例如,查找特定行的匹配城市,然后设置状态:
# total loops: 1000x100 = 100,000
for i, row in dataframe1.iterrows(): # 1000 rows
for j, row2 in dataframe2.iterrows(): # 100 rows
if row['market_city'] == row2['city']:
dataframe1.loc[i, 'state'] = row2['state']
我怎样才能把它分解成更易于管理的东西,比如O(n)
?你知道吗
您应该能够使用merge。没有在这台机器上安装python进行测试,但是类似于:
上面的代码将创建一个新的dataframe,它与dataframe1相同,但是当market\u city与city匹配时,它的状态来自dataframe2。如果这仍然不够快,
join()
可能会更快。你知道吗值得注意的是,在索引上连接速度更快,因此可以按以下方式设置索引:
哇,这个问题很有趣,有时优化代码也很有趣。你知道吗
我试了几行,没有使用for循环就得到了结果。你知道吗
我已经创建了两个数据集,正如你的问题中提到的
现在,我们有两个数据帧,在这里我们用
df2
状态替换df1
状态,在这里我们看到了df1
市场城市和df2
城市之间的匹配代码
相关问题 更多 >
编程相关推荐