在数据集中的行之间创建空行,然后使用下面的行填充它们。蟒

时间:2017-09-26 15:39:55

标签: python pandas

所以我有两个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

谢谢,我希望这很清楚(编辑后更清晰。

2 个答案:

答案 0 :(得分:2)

使用pd.concatbfill

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