使用另一个列表从数据帧列表添加数据帧

时间:2019-05-20 22:34:28

标签: python list dataframe addition

我无法在数据帧列表中添加几个数据帧。我的目标是根据另一个列表中的条件从一个数据帧列表中添加数据帧。

示例:假设我们有一个包含10个数据帧的列表DfList和另一个名为OrderList的列表。

假设OrderList = [3, 2, 1, 4]

然后,我想以[DfList(0) + DfList(1) + DfList(2), DfList(3) + DfList(4), DfList(5), DfList(6) + DfList(7) + DfList(8) + DfList(9)]

的形式获取4个数据框的新列表。

我尝试了几种使用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错误。

是否有一种我没有考虑过的简便方法,或者您有完全建议的其他方法吗?

编辑:我正在寻找的输出是另一个DataFrame列表,其中包含四个基于OrderList的求和的DataFrame(在所有列中)。三个DataFrame一起添加为第一个,两个为第二个,一个为第三个,而第四则是四个。

1 个答案:

答案 0 :(得分:1)

如果您有一个所说的DataFrames列表,则可以使用操作sum(DfList[0:2]),但是您需要注意列表中每个DataFrame中列的顺序,因为在添加数据框。列名不会相应地增加。如果需要,可以更改列的顺序,如其他question所示。

此示例说明了该问题:

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]