Я пытаюсь придумать какой-нибудь код, который по существу вычислит совокупное значение в местах под ним. Взятие кумулятивной суммы почти завершает это, но некоторые местоположения вносят вклад в ту же точку ниже по течению. Кроме того, большинство исходных точек (или начальных точек) не будут иметь каких-либо значений, способствующих им, и могут оставаться их начальными значениями в итоговом накопительном DataFrame.
Допустим, у меня есть следующий DataFrame для каждого сайта.
df = pd.DataFrame({
"Site 1": np.random.rand(10),
"Site 2": np.random.rand(10),
"Site 3": np.random.rand(10),
"Site 4": np.random.rand(10),
"Site 5": np.random.rand(10)})
У меня также есть таблица данных, в которой есть каждый сайт и соответствующий нисходящий компонент.
df_order = pd.DataFrame({
"Site 1": Site 3,
"Site 2": Site 3,
"Site 3": Site 4,
"Site 4": Site 5,
"Site 5": None})
Я хочу сделать следующее:
1) Суммировать значения в восходящем направлении, чтобы получить кумулятивную сумму для соответствующего значения в нисходящем направлении. Например, сайт 1 и сайт 2 вносят вклад в ценность на сайте 3. Итак, я хочу добавить сайт 1, сайт 2 и сайт 3 вместе, чтобы получить совокупное значение на сайте 3.
2) Теперь что у меня есть это совокупное значение на сайте 3, я хочу сохранить это совокупное значение на сайте 3 в «df». Теперь я хочу распространить это значение на Сайт 4, сохранить его, обновив DataFrame, а затем перейти на Сайт 5.
Я могу получить значение close-i sh, используя cumsum, чтобы получить совокупное значение на каждом сайте , например:
df = df.cumsum(axis=1)
Однако это не учитывает того, что Сайт 1 и Сайт 2 вносят вклад в Сайт 3, а не друг в друга.
Что ж, я могу решить эту проблему вручную, используя:
df['Site 3'] = df.loc[:,'Site 1':'Site 3'].sum(axis = 1)
df['Site 4'] = df.loc[:,'Site 3':'Site 4'].sum(axis = 1)
df['Site 5'] = df.loc[:,'Site 4':'Site 5'].sum(axis = 1)
Однако мой фактический список сайтов гораздо более обширный, и ручной метод не учитывает автоматически предоставленный «df_order». Есть ли способ логически связать DataFrame "df_order" таким образом, чтобы он мог вычислить это автоматически? Я знаю, как сделать это вручную, как бы я расширил это, чтобы иметь возможность обрабатывать больший DataFrame и порядок сайтов?
Подумайте о большем DataFrame, потенциально до 50 сайтов, который выглядит следующим образом:
df_order = pd.DataFrame({
"Site 1": Site 3,
"Site 2": Site 3,
"Site 3": Site 4,
"Site 4": Site 5,
"Site 5": Site 8,
"Site 6": Site 8,
"Site 7": Site 8,
"Site 8": Site 9,
"Site 9": None})