猿问

基于两个索引减去两个多索引数据帧

我有两个数据框,如下所示:


df1 = 

          val

id1 id2

foo  1     50

     2    100

     4    200

bar  1     25

     4    100

     8    200

baz  2     75

     4    150



df2 = 

          val

id1 id2

foo  1     60

     2    200

     3    100

bar  1     50

     4    101

     8    202

baz  2     70

     5    155

我正在尝试创建一个新的数据框,它比较两个索引并val仅在两个索引匹配时减去该列。


如何生成数据:


import pandas as pd

d1 = {'id1':['foo','foo', 'foo', 'bar', 'bar', 'bar','baz', 'baz'],

   'id2':[1, 2, 4, 1, 4, 8, 2, 4], 

   'val':[50, 100, 200, 25, 100, 200, 75, 150]}

df1 = pd.DataFrame(data=d1)

df1.set_index(['id1', 'id2'], inplace=True)

 


import pandas as pd

d2 = {'id1':['foo','foo', 'foo', 'bar', 'bar', 'bar','baz', 'baz'],

   'id2':[1, 2, 3, 1, 4, 8, 2, 5], 

   'val':[60, 200, 100, 50, 101, 202, 70, 155]}

df2 = pd.DataFrame(data=d2)

df2.set_index(['id1', 'id2'], inplace=True)

我对 python 很陌生,多索引现在是我生活的祸根。


呼如林
浏览 131回答 1
1回答

慕工程0101907

您可以直接减去两个数据帧。它将减去索引匹配的值。像下面,res=df1-df2输出:           valid1 id2       bar 1    -25.0    4     -1.0    8     -2.0baz 2      5.0    4      NaN    5      NaNfoo 1    -10.0    2   -100.0    3      NaN    4      NaN           val如果您只想查看匹配的记录,请尝试如下操作,res[res['val'].notnull()]输出:id1 id2       bar 1    -25.0    4     -1.0    8     -2.0baz 2      5.0foo 1    -10.0    2   -100.0有关更多详细信息,请访问此链接多索引如果您有多个列并希望对下面的单列执行减法df1['res']=df1['val']-df2['val']输出:         val    resid1 id2            foo 1     50  -10.0    2    100 -100.0    4    200    NaNbar 1     25  -25.0    4    100   -1.0    8    200   -2.0baz 2     75    5.0    4    150    NaN上面的代码片段对val列执行减法并将其存储到名为的新列中res
随时随地看视频慕课网APP

相关分类

Python
我要回答