Добавление фреймов данных из списка фреймов данных с использованием другого списка - PullRequest
1 голос
/ 21 мая 2019

У меня проблемы с добавлением нескольких фреймов данных в список фреймов данных. Моя цель - добавить фреймы данных из списка фреймов данных на основе критериев из другого списка.

Пример. Предположим, у нас есть список из 10 кадров данных, DfList и еще один список с именем OrderList.

Предположим, OrderList = [3, 2, 1, 4].

Тогда я бы хотел получить новый список из 4 Данных в виде [DfList(0) + DfList(1) + DfList(2), DfList(3) + DfList(4), DfList(5), DfList(6) + DfList(7) + DfList(8) + DfList(9)]

Я пробовал несколько способов сделать это, используя функции DataFrame.add. Изначально я надеялся, что для этого я смогу использовать форму sum(DfList(0), DfList(1), DfList(2)), но быстро понял, что sum() не поддерживается в DataFrames.

Я надеялся использовать что-то вроде sum(DfList[0:2]) и сделать OrderList кумулятивным, чтобы я мог просто использовать sum(DfList[OrderList[i]:OrderList[i+1]]), но продолжать получать unsupported operand type ошибки.

Есть ли простой способ сделать это, который я не рассматриваю, или есть совершенно другой подход, который вы бы предложили?

РЕДАКТИРОВАТЬ: выходной файл, который я ищу, представляет собой другой список DataFrames, содержащий четыре суммированных DataFrames на основе OrderList (по всем столбцам). Три DataFrames добавлены вместе для первого, два для второго, один для третьего, и четыре за четвертый.

1 Ответ

1 голос
/ 21 мая 2019

Если у вас есть список DataFrames, как вы сказали, вы можете использовать операцию sum(DfList[0:2]), но вам нужно быть осторожным с порядком столбцов в каждом DataFrame в вашем списке, поскольку указанный порядок используется при добавлении DataFrames. Добавление не происходит в соответствии с именами столбцов. При необходимости порядок столбцов можно изменить, как показано в этом другом вопросе .

Этот пример иллюстрирует проблему:

import pandas as pd

df1 = pd.DataFrame({1:[1,23,4], 2:['x','y','z']})
df2 = pd.DataFrame({2:['x','y','z'], 1:[1,23,4]})

try:
    df1 + df2
except TypeError:
    print("Error")

df1 = pd.DataFrame({1:[1,23,4], 2:['x','y','z']})
df2 = pd.DataFrame({1:[1,23,4], 2:['x','y','z']})

#works fine
df1 + df2

Кроме того, логика, которую вы использовали для совокупной суммы в sum(DfList[OrderList[i]:OrderList[i+1]]), неверна. Чтобы это имело место, OrderList также должен быть кумулятивным и иметь один дополнительный элемент для начала с нуля, поэтому вместо OrderList = [3, 2, 1, 4] вы получите OrderList = [0, 3, 5, 6, 10].

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