我无法在数据帧列表中添加几个数据帧。我的目标是根据其他列表中的条件从数据帧列表中添加数据帧。
示例:假设我们有一个包含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))
形式执行此操作,但很快了解到Datacc似乎不支持sum()
。
我希望使用类似sum(DfList[0:2])
的方法并使OrderList
累积,因此我可以只使用sum(DfList[OrderList[i]:OrderList[i+1]])
但仍会出现unsupported operand type
错误。
有没有我不考虑的简便方法,还是您建议使用完全不同的方法?
编辑:我正在寻找的输出是另一个DataFrame列表,其中包含四个基于OrderList
的汇总DataFrame(在所有列中。)三个DataFrames一起添加为第一个,两个为第二个,一个为第三个,四个为第四。
最佳答案
如果您有一个所说的DataFrames列表,则可以使用操作sum(DfList[0:2])
,但是您需要注意列表中每个DataFrame中列的顺序,因为在添加DataFrames时会使用提供的顺序。列名不会相应地增加。如果需要,可以按其他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]
。