我有许多数据框,其中包含标有“日期”和“费用”的列以及其他列。我想根据“日期”列中的日期排列,在不同框架的“费用”列中添加数值数据,以提供每个日期的总费用的时间序列。
每个数据框中都有不同数量的行。
这似乎是熊猫应该做的事情,但我找不到一个干净的解决方案。
任何帮助表示赞赏!
以下是两个数据框:
df1:
Date Total Cost Funded Costs
0 2015-09-30 724824 940451
1 2015-10-31 757605 940451
2 2015-11-15 788051 940451
3 2015-11-30 809368 940451
df2:
Date Total Cost Funded Costs
0 2015-11-30 3022 60000
1 2016-01-15 3051 60000
我希望生成的数据框有五行(有五个不同的日期)和一个列,其中包含每个数据框的“总成本”列的总和。最初我使用了以下内容:
totalFunding = df1['Total Cost'].values + df2['Total Cost'].values
这在每个数据框中都有不同的日期之前一直正常。
谢谢!
下面发布的解决方案效果很好,除了我需要以递归方式执行此操作,因为我有许多数据框。我创建了以下函数:
def addDataFrames(f_arg, *argv):
dfTotal = f_arg
for arg in argv:
dfTotal = dfTotal.set_index('Date').add(arg.set_index('Date'), fill_value = 0)
return dfTotal
添加前两个数据帧时可以正常工作。但是,添加方法似乎将我的Date列转换为结果总和中的索引,因此后续的函数传递失败。以下是将前两个数据框加在一起后dfTotal的样子:
Total Cost Funded Costs Remaining Cost Total Employee Hours
Date
2015-09-30 1449648 1880902 431254 7410.6
2015-10-31 1515210 1880902 365692 7874.4
2015-11-15 1576102 1880902 304800 8367.2
2015-11-30 1618736 1880902 262166 8578.0
2015-12-15 1671462 1880902 209440 8945.2
2015-12-31 1721840 1880902 159062 9161.2
2016-01-15 1764894 1880902 116008 9495.0
请注意,数据框中最初名为“Date”的列现在被列为导致df.set_index('Date')的索引,以便在后续遍历我的函数时生成错误。
答案 0 :(得分:0)
DataFrame.add完全符合您的要求;它匹配基于索引的DataFrame,所以:
df1.set_index('Date').add(df2.set_index('Date'), fill_value=0)
应该做的伎俩。如果您只想要“总费用”列,并希望将其作为数据框:
df1.set_index('Date').add(df2.set_index('Date'), fill_value=0)[['Total Cost']]
另请参阅DataFrame.add的文档: http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.DataFrame.add.html
答案 1 :(得分:0)
找到解决方案。如上所述,add方法将'Date'列转换为dataframe索引。这是通过以下方式解决的:
dfTotal['Date'] = dfTotal.index
完整的功能是:
def addDataFrames(f_arg, *argv):
dfTotal = f_arg
for arg in argv:
dfTotal = dfTotal.set_index('Date').add(arg.set_index('Date'), fill_value = 0)
dfTotal['Date'] = dfTotal.index
return dfTotal