首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解`pd.DataFrame.div()`和`pd.DataFrame.mul()`

理解`pd.DataFrame.div()`和`pd.DataFrame.mul()`
EN

Stack Overflow用户
提问于 2021-02-04 03:18:56
回答 1查看 54关注 0票数 0

我正在尝试弄清楚如何划分两个数据帧,而pd.DataFrame.div()pd.DataFrame.mul()文档似乎并没有很好地为我解释所有事情。下面是MWE

代码语言:javascript
复制
import pandas as pd
import numpy as np

ref = pd.DataFrame({'key':['a','b','c','d','e','h','z'], 'Values1':[1,2,3,4,5,'NaN','NaN']})
sub = pd.DataFrame({'key':['a','b','z','e','c','a'], 'Values2':[20,40,'Nan',60,80,100]})

ref = ref.set_index('key').astype('float64')
sub = ref.set_index('key').astype('float64')


### Create some sample dataframes of same size w/ different values

test1 = pd.concat([ref.reindex(sub.index.tolist()), sub], axis=1).astype('float64')
test2 = pd.concat([sub,sub*3],axis=1

### Sample Computations 

# 1) Divide test2 by test1, axis = 'index'

test2.div(test1, axis = 'index')

    Values1  Values2    Values2
key         
a    NaN     1.0    0.333333
b    NaN     1.0    0.333333
z    NaN     NaN    NaN
e    NaN     1.0    0.333333
c    NaN     1.0    0.333333
a    NaN     1.0    0.333333

似乎正在发生的情况是,.div()方法获取test2的每一列,并将其除以test中同名的列。因此,.div()避免使用Values1列,然后对名称相似的列进行除法。我的目标是得到类似于下面的东西:

代码语言:javascript
复制
    Values1  Values2    
key         
a    0.05    0.33   
b    0.05    0.33   
z    NaN     NaN    
e    0.083   0.33   
c    0.038   0.33   
a    0.01    0.33   

我实际上可以通过执行test1.values / test2.values获得我想要的值,但是我必须将这些值重新合并到一个数据帧中,这似乎效率很低,并且表明我在尝试使用.div().mul()时可能做错了什么。

因此,我希望有人能向我解释.div()方法在这种情况下是如何工作的,以及为什么我的结果不是我认为应该得到的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-04 03:29:54

你的列是不一样的。这里的test2包含["Values2", "Values2"]列,而不是["Values1", "Values2"]列。请参见下面的固定列。还要注意你有一个打字错误,我做了标记。您也可以将2除以1,但您的预期输出是1除以2。

代码语言:javascript
复制
import pandas as pd
import numpy as np

ref = pd.DataFrame({'key':['a','b','c','d','e','h','z'], 'Values1':[1,2,3,4,5,'NaN','NaN']})
sub = pd.DataFrame({'key':['a','b','z','e','c','a'], 'Values2':[20,40,'Nan',60,80,100]})


ref = ref.set_index('key').astype('float64')
sub = sub.set_index('key').astype('float64') #fixed typo


### Create some sample dataframes of same size w/ different values

test1 = pd.concat([ref.reindex(sub.index.tolist()), sub], axis=1).astype('float64')
test2 = pd.concat([sub,sub*3],axis=1)
test2.columns=test1.columns #fix columns

### Sample Computations 

# 1) Divide test2 by test1, axis = 'index'

print(test1)

print(test2)

print(test2.div(test1))
#showing axis:
print(test2.div([1,2], axis = 'columns'))
print(test2.div([1,2,3,4,5,6], axis = 'index'))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66034294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档