如何在Python中划分具有不同长度和重复索引的两个数据帧

时间:2016-09-14 16:01:35

标签: python pandas

这是我的代码,我希望获得预期的输出,但是,数据帧的划分不起作用,这里有什么问题?

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

2 个答案:

答案 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不知道如何合并它们,因为这是一个模糊的情况具有。通常在索引中有重复项不是一个好主意。摆脱重复,你的代码将起作用。