我有两个数据框:
DT1:
date value
0 20000101 2
1 20100101 5
DT2:
date value
0 20000101 1
1 20100101 1
新数据框是dt1.value和dt2.value:
的减法 date value
0 20000101 1
1 20100101 4
怎么做?
答案 0 :(得分:1)
您可以尝试在index
和index
列上设置date
并减去两个dataframe
:
dt = (dt1.set_index(['index', 'date'])- dt2.set_index(['index', 'date'])).reset_index()
dt
结果:
index date value
0 0 20000101 1
1 1 20100101 4
或者,您可以将dt1
复制到新数据框并按减法结果更新value
列:
dt = dt1.copy()
dt['value'] = dt1['value'] - dt2['value']
查看timeit
,copy
和更新值似乎比索引,减去和重置索引要快得多:
%%timeit
dt = (dt1.set_index(['index', 'date'])- dt2.set_index(['index', 'date'])).reset_index()
dt
结果:
100 loops, best of 3: 4.35 ms per loop
copy
:
%%timeit
dt = dt1.copy()
dt['value'] = dt1['value'] - dt2['value']
结果:
1000 loops, best of 3: 371 µs per loop
答案 1 :(得分:0)
假设你有:
df1=pd.DataFrame({'date': {0: 20000101, 1: 20100101}, 'value': {0: 2, 1: 5}})
df2=pd.DataFrame({'date': {0: 20000101, 1: 20100101}, 'value': {0: 1, 1: 1}})
您可以使用sbtract:
df1.assign(value=df1.value-df2.value)
Out[253]:
date value
0 20000101 1
1 20100101 4
答案 2 :(得分:0)
使用sub
dt1.set_index(["index", "date"]).sub(dt2.set_index(["index", "date"]), fill_value=0).reset_index()