0

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

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'])

我在 Google 上找不到任何与 dfs.loc 相关的变量文档,其中大多数都具有固定名称。

输出应该是:

B1 10 100
B1 100 1000
B2  20  200
B2  400 5600
4

1 回答 1

3

我不会修改你的嵌套循环,因为它有太多问题(例如,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)
于 2019-03-10T20:22:21.460 回答