Я столкнулся с трудной проблемой, которую нужно решить, прежде чем взорваться
Моя проблема лучше всего описывается данными. Это выглядит так:
df = pd.DataFrame({
'A': [
[0.05, 0.055, 0.055, 0.06, 0.065, 0.07, 0.075, 0.075, 0.085, 0.09, 1.32],
[0.4, 0.06, 0.06, 0.13, 0.135, 0.145, 0.155, 0.17] ,
[3.81, 0.3, 0.4, 0.425, 0.445, 0.48, 0.51, 0.54, 0.58, 0.62, 0.66, 0.66, 0.705, 0.53, 0.57, 0.61],
[7.395, 0.075, 0.085, 0.09, 0.095, 0.1, 0.11, 0.12, 0.13, 0.14],
[0.105, 0.11, 0.12, 0.125, 0.135, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.205, 2.21]
],
'B' : [
[0.680, 1.320],
[0.520, 0.130, 0.135, 0.145, 0.155, 0.170],
[8.035, 3.810],
[0.945, 7.395],
[1.790, 2.210]
],
'C' : [
['08/01/91', '08/01/10'],
['09/01/92', '09/01/93', '09/01/94', '09/01/95', '09/01/96', '09/01/10'],
['11/01/91', '11/01/10'],
['09/01/93', '09/01/21'],
['12/01/92', '12/01/10']
]
})
df
A B C
0 [0.05, 0.055, 0.055, 0.06, 0.065, 0.07, 0.075, 0.075, 0.085, 0.09, 1.32] [0.68, 1.32] [08/01/91, 08/01/10]
1 [0.4, 0.06, 0.06, 0.13, 0.135, 0.145, 0.155, 0.17] [0.52, 0.13, 0.135, 0.145, 0.155, 0.17] [09/01/92, 09/01/93, 09/01/94, 09/01/95, 09/01/96, 09/01/10]
2 [3.81, 0.3, 0.4, 0.425, 0.445, 0.48, 0.51, 0.54, 0.58, 0.62, 0.66, 0.66, 0.705, 0.53, 0.57, 0.61] [8.035, 3.81] [11/01/91, 11/01/10]
3 [7.395, 0.075, 0.085, 0.09, 0.095, 0.1, 0.11, 0.12, 0.13, 0.14] [0.945, 7.395] [09/01/93, 09/01/21]
4 [0.105, 0.11, 0.12, 0.125, 0.135, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.205, 2.21] [1.79, 2.21] [12/01/92, 12/01/10]
Гарантируется, что сумма элементов списка в A равна сумме элементов списка в B. Обычно они упорядочены, но есть случаи, когда оно отменяется.
Например, в случае, например, строки 0, первые 10 элементов суммируют до 0,68, а 1,32 сопоставляются по порядку.
Однако, строка 2 - наоборот, так как 3.81 соответствует последнему элементу B. Столбцы B & C относятся к одному и тому же набору данных, поэтому они должны быть перенесены, чтобы соответствовать порядку A.
Мой желаемый результат будет таким, как показано ниже после сопоставления и взрыва:
A B C
0 0.05 0.68 08/01/91
0 0.055 0.68 08/01/91
0 0.055 0.68 08/01/91
0 0.06 0.68 08/01/91
0 0.065 0.68 08/01/91
0 0.07 0.68 08/01/91
0 0.075 0.68 08/01/91
0 0.085 0.68 08/01/91
0 0.09 0.68 08/01/91
0 1.32 1.32 08/01/10
...
2 3.81 3.81 11/01/10
2 0.3 8.035 11/01/91
2 0.4 8.035 11/01/91
2 0.425 8.035 11/01/91
2 0.445 8.035 11/01/91
2 0.48 8.035 11/01/91
2 0.51 8.035 11/01/91
2 0.54 8.035 11/01/91
2 0.58 8.035 11/01/91
2 0.62 8.035 11/01/91
2 0.66 8.035 11/01/91
2 0.66 8.035 11/01/91
2 0.705 8.035 11/01/91
2 0.52 8.035 11/01/91
2 0.57 8.035 11/01/91
2 0.61 8.035 11/01/91
Любые идеи и подходы высоко ценятся.
Я обнаружил, что допустил ошибку в приведенных выше данных и исправил ее. B & C у них всегда есть точное количество элементов в их списке.
Случай строки 1: мой желаемый результат будет:
1 0.4 0.520 09/01/92
1 0.06 0.520 09/01/92
1 0.06 0.520 09/01/92
1 0.13 0.130 09/01/93
1 0.135 0.135 09/01/94
1 0.145 0.145 09/01/95
1 0.155 0.155 09/01/96
1 0.17 0.17 09/01/10