所以我有两个csv银行对帐单文件看起来与此类似,我试图制作一个总体余额随时间变化的图表:
Bank A Bank B
Date Amount Date Amount
24/09 240
25/09 1400 23/09 200
23/09 1250 22/09 250
20/09 1235 21/09 200
问题在于,如果我只是将它们合并在一起并绘制图形;如果在特定日期只有一个帐户的余额信息,那么我的余额看起来就像这么多。例如。在22/09它将显示250英镑(银行B),当它真正的250英镑(银行b)+ 1235英镑(从前一天的银行a是我仍然有钱)= 1485英镑。
如果有更好的解决方案,请告诉我,但似乎我需要在每个数据集中插入空白行,看起来像这样(对于两者):
Bank A
Date Amount
25/09 1400
24/09 (null)
23/09 1250
22/09 (null)
21/09 (null)
20/09 1235
...然后从最后一次展示时填写余额:
Bank A
Date Amount
25/09 1400
24/09 1250
23/09 1250
22/09 1235
21/09 1235
20/09 1235
银行B也是如此:
Bank B
Date Amount
25/09 null
24/09 240
23/09 200
22/09 250
21/09 200
变为:
Bank B
Date Amount
25/09 240
24/09 240
23/09 200
22/09 250
21/09 200
然后我可以对每个文件中的列进行求和,并在每天获得总余额,如下所示:
Both Banks
Date Amount
25/09 1640
24/09 1490
23/09 1450
22/09 1485
21/09 1235
谢谢,我希望这很清楚(编辑后更清晰。
答案 0 :(得分:2)
使用pd.concat
和bfill
BB.Amount=np.nan
df=pd.concat([BA,BB.loc[~BB.Date.isin(BA.Date),:]],axis=0)
df.reset_index(drop=True).sort_values('Date',ascending=False).bfill()
然后,您获得了dataframe
Bank A
Out[1240]:
Date Amount
0 25/09 1100.0
1 25/09 1400.0
4 24/09 1250.0
2 23/09 1250.0
5 22/09 1235.0
6 21/09 1235.0
3 20/09 1235.0
编辑:
dfA=dfA.set_index('Date')
dfB=dfB.set_index('Date')
dfA.groupby(level=0).sum()# add group by here
dfB.groupby(level=0).sum()
idx=list(set(dfA.index).union(dfB.index))
dfA=dfA.reindex(idx).sort_index(ascending=False).bfill()
dfB=dfB.reindex(idx).sort_index(ascending=False).bfill()
dfA+dfB
Out[25]:
Amount
Date
25/09 1640.0
24/09 1490.0
23/09 1450.0
22/09 1485.0
21/09 1435.0
20/09 NaN
答案 1 :(得分:1)
您可以在日期合并两个数据框,然后在轴1上合计数量
df = dfA.merge(dfB, on = 'Date', how = 'outer')
df['Amount'] = df.sum(1)
现在,您可以按日期分组以结束日期
df.groupby('Date').Amount.sum().reset_index()
你得到了
Date Amount
0 20/09 1235.0
1 21/09 200.0
2 22/09 250.0
3 23/09 1450.0
4 24/09 240.0
5 25/09 2500.0
编辑:借用@ wen' s idx = ..
dfB.set_index('Date', inplace = True)
idx = list(set(dfA.index).union(dfB.index))
dfA = dfA.reindex(idx).sort_index().reset_index()
dfA['Amount'].ffill(inplace = True)
dfB = dfB.reindex(idx).sort_index().reset_index()
dfB['Amount'].ffill(inplace = True)
现在你合并并找到总和
dfA.merge(dfB, on = 'Date',how = 'outer')
df['Amount'] = df.sum(1)
你得到了
Date Amount_x Amount_y Amount
0 20/09 1235.0 NaN 1235.0
1 21/09 1235.0 200.0 1435.0
2 22/09 1235.0 250.0 1485.0
3 23/09 1250.0 200.0 1450.0
4 24/09 1250.0 240.0 1490.0
5 25/09 1400.0 240.0 1640.0