我有两个数据框,其中一个列名是“块名”,并且在列中具有唯一的值,但是它们的顺序可能不完全一致,并且可能会有些不匹配。
DFS1:
Block Name val1 val2
B1 10 100
B2 20 200
B3 30 300
DFS2:
Block Name val1 val2
B1 100 1000
B4 350 3500
B2 400 5600
我想在DFS1的for循环中获取“块名”的每个块,如果它与DFS2匹配,则从DFS1打印两行,将其匹配为B1,将DFS2的两行打印为与B1匹配,类似对于其他匹配的行(例如B2等),如果不匹配,则只需打印它是来自任何一个表的新行即可。
我正在编写如下所示的代码,但是无法在dfs1.loc命令中传递变量。
for b1 in dfs1['Block Name']:
print(b1)
for b2 in dfs2['Block Name']:
print(b2)
if b1 == b2:
print(dfs1.loc[dfs1['Block Name'] == 'b2'])
我在dfs.loc上的Google上找不到任何与变量相关的文档,其中大多数具有固定名称。
输出应为:
B1 10 100
B1 100 1000
B2 20 200
B2 400 5600
答案 0 :(得分:2)
我将不修改嵌套循环,因为它存在太多问题(例如,如果要在同一行上打印它们,则需要在print()
命令中包括所有行元素),并且可能如果在原始的两个数据帧中行的顺序发生变化,则什至不起作用。
在尝试按该顺序打印行之前,应对数据框进行排序。这是一个仅依赖于Pandas方法的简单答案:
import pandas as pd
from __future__ import print_function
result = pd.concat([dfs1,dfs2],axis=0).sort_values(['Block Name','val1','val2']).reset_index(drop=True)
print(result)