根据Python数据框中的变量打印特定行

时间:2019-03-10 07:07:13

标签: python pandas dataframe variables row

我有两个数据框,其中一个列名是“块名”,并且在列中具有唯一的值,但是它们的顺序可能不完全一致,并且可能会有些不匹配。

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

1 个答案:

答案 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)