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

2024-06-06 12:49:22 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我有两个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

问题是,如果我简单地将它们合并在一起并用图表表示它们;如果某一天只有一个帐户的余额信息,那么我的余额看起来就只有这么多。例如,在2009年9月22日,它将显示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

谢谢,我希望这是足够清楚(和更清楚后编辑)。你知道吗


Tags: 文件csv信息date图表时间用图表帐户
2条回答

您可以在日期上合并两个数据帧,然后在轴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的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

通过使用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()

然后,你得到了你的dataframeBank 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

相关问题 更多 >