У меня есть две строки в Python3.x, которые определены как имеющие одинаковую длину:
string1 = 'WGWFTSJKPGP'
string2 = 'DORKSRQKYJG'
Мне также дают целое число, которое должно представлять "начальный индекс" string2
. В этом случае start_pos = 51
.
Цель - создать словарь на основе индексов. Итак, string1
начинается с 0
, string2
начинается с 51
. Словарь "преобразования" этих координат выглядит следующим образом:
{0: 51, 1: 52, 2: 53, 3: 54, 4: 55, 5: 56, 6: 57, 7: 58, 8: 59, 9: 60, 10: 61}
, который можно построить (приведите переменные выше) с помощью:
convert_dict = {i: i + start_pos for i, _ in enumerate(string1)}
В настоящее время у меня есть эти данные в виде панды DataFrame:
import pandas as pd
dict1 = {'column1':['MXRBMVQDHF', 'LJNVTJOY', 'LJNVTJOY', 'LJNVTJOY', 'WHLAOECVQR'], 'column2':['DPBVNJYANX', 'UWRAWDOB', 'PEKUYUQR', 'WPMLFVFZ', 'CUTQVWHRIJ'], 'start':[79, 31, 52, 84, 18]}
df = pd.DataFrame(dict1)
print(df)
# column1 column2 start
# 0 MXRBMVQDHF DPBVNJYANX 79
# 1 LJNVTJOY UWRAWDOB 31
# 2 LJNVTJOY PEKUYUQR 52
# 3 LJNVTJOY WPMLFVFZ 84
# 4 WHLAOECVQR CUTQVWHRIJ 18
В столбце column1
несколько записей одной и той же строки. В этом случае словарь для координат с LJNVTJOY
должен быть:
{0: [31, 52, 84], 1: [32, 53, 85], 2: [33, 54, 86], 3: [34, 55, 87],
4: [35, 56, 88], 5: [36, 57, 89], 6: [37, 58, 90], 7: [38, 59, 91]}
Я бы хотел взять этот DataFrame и вычислить аналогичные словари координат. Такое выражение .groupby('column1')
выглядит так, как-то следует использовать .apply()
? Я не уверен, как заполнить списки словаря, как это ...
Вот правильный вывод (с сохранением структуры DataFrame). Здесь DataFrame df2
имеет столбец 'new_column'
такой, что он выглядит следующим образом:
df2.new_column
0 {0: 79, 1: 80, 2: 81, 3: 82, 4: 83, 5: 84, 6: ...
1 {0: [31, 52, 84], 1: [32, 53, 85], 2: [33, 54, 86], 3: [34, 55, 87], 4: [35, 56, 88], 5: [36, 57, 89], 6: [37, 58, 90], 7: [38, 59, 91]}
2 {0: 52, 1: 53, 2: 54, 3: 55, 4: 56, 5: 57, 6: ...
Name: new, dtype: object