我有两个具有不同索引的数据框,我想对两个数据框的同一列求和。
根据一个建议,我尝试了以下操作,但忽略了其他列,例如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
我真正想要的是基于索引求和,并保留类别列和int
的{{1}} dtype:
Anomaly
答案 0 :(得分:1)
尝试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
答案 1 :(得分:1)
concat
和groupby
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
答案 2 :(得分:1)
经过最小的调整后,我在上一个问题中给出的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。