这是我的代码,我希望获得预期的输出,但是,数据帧的划分不起作用,这里有什么问题?
import pandas as pd
data1 = {'name':['A', 'C', 'D'], 'cond_a':['B','B','B'], 'value':[10,12,14]}
data2 = {'name':['A', 'C', 'D','D','A'], 'cond_a':['G','G','G','G','G'], 'value':[5,6,7,3,2]}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
df1.set_index('name', inplace=True)
df2.set_index('name', inplace=True)
df2['new_col'] = df2['value'] / df1['value']
预期产出:
cond_a value new_col
name
A G 5 5/10
C G 6 6/12
D G 7 7/14
D G 3 3/14
A G 2 2/10
答案 0 :(得分:5)
只要df1
具有唯一索引,您就可以在df2
执行除法时reindex
:
df2['new_col'] = df2['value'] / df1['value'].reindex(df2.index)
结果输出:
cond_a value new_col
name
A G 5 0.500000
C G 6 0.500000
D G 7 0.500000
D G 3 0.214286
A G 2 0.200000
答案 1 :(得分:1)
在您的情况下不起作用的不是DataFrame除法,您可以轻松检查:
$scope.yourClickFn = function(){
//the code you want to execute here
}
问题在于,在此划分的过程中df2['value'] / df1['value']
Out[]:
name
A 0.500000
A 0.200000
C 0.500000
D 0.500000
D 0.214286
Name: value, dtype: float64
会失去对索引pandas
的顺序的跟踪。然后,当您尝试将结果分配回name
时,您的索引df2
中有重复项,而name
不知道如何合并它们,因为这是一个模糊的情况具有。通常在索引中有重复项不是一个好主意。摆脱重复,你的代码将起作用。