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],并划分各个元素。