Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 理解`pd.DataFrame.div()`和`pd.DataFrame.mul()`_Python_Pandas_Dataframe - Fatal编程技术网

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

Python 理解`pd.DataFrame.div()`和`pd.DataFrame.mul()`,python,pandas,dataframe,Python,Pandas,Dataframe,我正在试图找出如何划分两个数据帧,而pd.DataFrame.div()和pd.DataFrame.mul()文档似乎并没有对我解释清楚。下面是一个MWE 将熊猫作为pd导入 将numpy作为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'

我正在试图找出如何划分两个数据帧,而
pd.DataFrame.div()
pd.DataFrame.mul()
文档似乎并没有对我解释清楚。下面是一个MWE

将熊猫作为pd导入
将numpy作为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,80100]})
ref=ref.set_index('key')。astype('float64'))
sub=ref.set_index('key')。astype('float64'))
###创建一些大小相同但值不同的示例数据帧
test1=pd.concat([ref.reindex(sub.index.tolist()),sub],axis=1.astype('float64'))
test2=pd.concat([sub,sub*3],轴=1
###样本计算
#1)将test2除以test1,轴='index'
test2.div(test1,axis='index')
值1值2值2
钥匙
a NaN 1.0 0.333
b NaN 1.0 0.333
滋楠楠楠楠
鄂南1.0.333
c NaN 1.0 0.333
a NaN 1.0 0.333
似乎正在发生的是.div()方法获取
test2
的每一列,并在
test
中将其除以同名列。因此,
.div()
避开了
Values1
列,然后对名称相似的列进行除法。我的目标是得到类似于以下的东西:


值1值2
钥匙
a 0.05 0.33
b 0.05 0.33
梓楠楠
e 0.083 0.33
c 0.038 0.33
a 0.01 0.33
实际上,我可以通过执行
test1.values/test2.values
来获取所需的值,但随后我必须将这些值合并回一个数据帧,这似乎效率低下,并表明我在尝试使用
.div()
.mul()
时可能做了一些错误的事情


因此,我希望有人能向我解释
.div()
方法在这个实例中是如何工作的,以及为什么我的结果没有像我认为的那样出来。

您的列不一样<代码>测试2这里有
[“Values2”,“Values2”]
的列,而不是
[“Values1”,“Values2”]
。请参见下面的固定列。还请注意,您有一个我标记的打字错误。您也在用2除以1,但预期的输出是1除以2

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'))

谢谢你帮我修好了。那么这里的问题是列必须有完全相同的名称?有没有一种方法可以在索引位置不同的情况下,用不同的列名实现相同的预期输出?如果列不相同,那么它如何知道要除以哪些列?我不知道,这可能是我的误解所在。我认为
axis='index
选项将查看每一行,然后将元素逐段分割。两个不同的数据帧具有相同的索引和不同的列似乎是很常见的事情。请参见我的编辑。Axis在这里什么也没做。Axis是指为每行或每列提供一个值,而不是第二个dataframe.OH。我想我现在明白了。例如,
.div()
从上到下传递列表[1,2],并划分各个元素。