减去两列数据框的两列

时间:2018-03-12 04:22:36

标签: python pandas dataframe

我有两个数据框:

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

怎么做?

3 个答案:

答案 0 :(得分:1)

您可以尝试在indexindex列上设置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']

查看timeitcopy和更新值似乎比索引,减去和重置索引要快得多:

%%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()