Вывести определенную строку на основе переменной в фрейме данных Python - PullRequest
0 голосов
/ 10 марта 2019

У меня есть два кадра данных, в которых одно из имен столбцов - «Имя блока» и имеет уникальные значения в столбце, но они могут быть не совсем по порядку и могут быть некоторые несоответствия.

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

IХотелось бы взять каждый блок "Block Name" в цикле for из DFS1, и, если он совпадает с 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

1 Ответ

2 голосов
/ 10 марта 2019

Я не собираюсь пересматривать ваш вложенный цикл, потому что у него слишком много проблем (например, вам нужно включить все элементы строки в команду 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...