我无法在数据帧列表中添加几个数据帧。我的目标是根据另一个列表中的条件从一个数据帧列表中添加数据帧。
示例:假设我们有一个包含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)]
我尝试了几种使用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一起添加为第一个,两个为第二个,一个为第三个,而第四则是四个。
答案 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]
。