对两个不同索引的数据帧求和

2024-06-01 04:06:02 发布

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

我有两个具有不同索引的数据帧,我想对这两个数据帧中的同一列求和。 基于一个建议,我尝试了以下内容,但是删除了其他列,如cat

df = df.set_index('date')
tmp = tmp.set_index('date')
result = df['Anomaly'].add(tmp['Anomaly'], fill_value=0).reset_index()
df
    date       cat    Anomaly
0 2018-12-06    a      0
1 2019-01-07    b      0
2 2019-02-06    a      1
3 2019-03-06    a      0
4 2019-04-06    b      0

tmp
    date        cat   Anomaly
0 2018-12-06     a      0
1 2019-01-07     b      1
4 2019-04-06     b      0

result
    date           Anomaly
0 2018-12-06         0.0
1 2019-01-07         1.0 
2 2019-02-06         1.0
3 2019-03-06         0.0
4 2019-04-06         0.0

实际上,我想要的是基于索引求和,并保持category列和intdtype的Anomaly

result
    date          cat    Anomaly
0 2018-12-06       a         0
1 2019-01-07       b         1
2 2019-02-06       a         1
3 2019-03-06       a         0
4 2019-04-06       b         0

Tags: 数据adddfdateindexvalueresultfill
3条回答

我对你上一个问题给出的answer经过最小的调整后仍然有效:

tmp1 = tmp.set_index('date')
result = df.set_index('date')
result.loc[tmp1.index, 'Anomaly'] += tmp1['Anomaly]
result.reset_index(inplace=True)

它给出:

         date cat  Anomaly
0  2018-12-06   a        0
1  2019-01-07   b        1
2  2019-02-06   a        1
3  2019-03-06   a        0
4  2019-04-06   b        0

保留df的cat列,并保留Anomaly的int64类型

concatgroupby

pd.concat([df, temp]).groupby(['date','cat'], as_index=False).sum()  

         date cat  Anomaly
0  2018-12-06   a        0
1  2019-01-07   b        1
2  2019-02-06   a        1
3  2019-03-06   a        0
4  2019-04-06   b        0

set_index+add

a = df.set_index(['date', 'cat'])
b = temp.set_index(['date', 'cat'])

a.add(b, fill_value=0).reset_index().astype({'Anomaly': int})

         date cat  Anomaly
0  2018-12-06   a        0
1  2019-01-07   b        1
2  2019-02-06   a        1
3  2019-03-06   a        0
4  2019-04-06   b        0

试试update

df.Anomaly.update(df.Anomaly+tmp.Anomaly)

输出:

           cat  Anomaly
date                   
2018-12-06   a        0
2019-01-07   b        1
2019-02-06   a        1
2019-03-06   a        0
2019-04-06   b        0

相关问题 更多 >