Как объединить два файла на основе сопоставления столбцов? - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть два файла, из которых я хочу создать третий, содержащий всю информацию, и каждый столбец разделен табуляцией.

файл 1:

67      rule_ref: _avc ,output_tag: 'hello'
2       rule_ref: _cdf ,output_tag: 'hi'
334     rule_ref: _xyz ,output_tag: 'bye'
1       rule_ref: _abc ,output_tag: 'go'

файл 2:

rule_ref: _avc ,output_tag: 'hello'     1
rule_ref: _cdf ,output_tag: 'hi'        4
rule_ref: _xyz ,output_tag: 'bye'    5

И хотел бы file3 такой, что:

67    1    rule_ref: _avc ,output_tag: 'hello'
2     4    rule_ref: _cdf ,output_tag: 'hi'
334   5    rule_ref: _xyz ,output_tag: 'bye'
1     0    rule_ref: _abc ,output_tag: 'go'

2-й столбец file1 соответствует 1-му столбцу file2, а file3 содержит 1-й столбец из file1,2-й столбец из файла 2 и 3-й столбец из файла 1.

Я ищу в Google, но не могу найти никакого решения, чтобы решить эту проблему.Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Сложно сказать, учитывая то, как SO ест вкладки, каковы ваши столбцы.Еще один символ сделает это намного проще.

Однако, исходя из вашего описания, в первом файле я думаю, что числа - это один столбец, а rule_ref: _avc ,output_tag: 'hello' и т. Д. - второй?И похоже на второй файл?Но вы упоминаете третий столбец первого файла, который не существует с этой схемой.Вы имели в виду второе?

Если это так ...

$ join -t $'\t' -1 2 -2 1 -a 1 -e 0 -o '1.1 2.2 1.2' <(sort -t $'\t' -k 2 file1.txt) <(sort -t $'\t' -k 1 file2.txt)
1   0   rule_ref: _abc ,output_tag: 'go'
67  1   rule_ref: _avc ,output_tag: 'hello'
2   4   rule_ref: _cdf ,output_tag: 'hi'
334 5   rule_ref: _xyz ,output_tag: 'bye'

(join требует, чтобы присоединяемые файлы сортировались в соответствующем поле, чего нет в ваших примерах,отсюда и сортировка. Также требуется оболочка типа bash, которая понимает $'\t'.)

0 голосов
/ 04 февраля 2019

Во-первых, я предполагаю, что вы используете Pandas Dataframe , затем вам просто нужно использовать слияние.

Попробуйте это:

file1.merge(file2, on='Column with same values', left_on='lkey', right_on='rkey')

Док: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...