Эта проблема лучше решается с помощью numpy
.Я начну с того, что вы получите список от вашего пользовательского ввода.Весь смысл в том, чтобы использовать numpy.split
для разделения значений на основе совокупного числа запрошенных пикселей, а затем создать новую DataFrame
Настройка
import numpy as np
import pandas as pd
np.random.seed(123)
df = pd.DataFrame({'val': np.random.randint(1,10,50)})
lst = [4,10,2,1,15,8,9,1]
Код
pd.DataFrame(np.split(df.val.values, np.cumsum(lst)[:-1]))
Вывод
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 3 3.0 7.0 2.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 4 7.0 2.0 1.0 2.0 1.0 1.0 4.0 5.0 1.0 NaN NaN NaN NaN NaN
2 1 5.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 8 4.0 3.0 5.0 8.0 3.0 5.0 9.0 1.0 8.0 4.0 5.0 7.0 2.0 6.0
5 7 3.0 2.0 9.0 4.0 6.0 1.0 3.0 NaN NaN NaN NaN NaN NaN NaN
6 7 3.0 5.0 5.0 7.0 4.0 1.0 7.0 5.0 NaN NaN NaN NaN NaN NaN
7 8 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Если в вашем списке больше пикселей, чем общее количество строк в исходном DataFrame
, тогда вы получите дополнительные все NaN
строк в вашемвыход.Если сумма lst
меньше общего количества пикселей, он добавит их ко всем последним строкам.Поскольку вы не указали ни одно из этих условий в своем вопросе, не знаете, как бы вы хотели с этим справиться.