将一个Pandas Dataframe划分为另一个 - 忽略索引但尊重列

Dic*_*ter 5 python divide pandas

我有2个数据帧.我想广播分道操作

df1= pd.DataFrame([[1.,2.,3.,4.], [5.,6.,7.,8.], [9.,10.,11.,12.]],
                  columns=['A','B','C','D'], index=['x','y','z'])

df2= pd.DataFrame([[0.,1.,2.,3.]], columns=['A','B','D','C'], index=['q'])
Run Code Online (Sandbox Code Playgroud)

请注意,df2中的列的对齐方式略有不同.

我想将df1除以df2,其中广播行但是列标签被尊重.

   A   B   C   D
x  1   2   3   4
y  5   6   7   8
z  9  10  11  12


   A  B  D  C
q  0  1  2  3
Run Code Online (Sandbox Code Playgroud)

这是错误的.

df1.values/df2.values

[[         inf   2.           1.5          1.33333333]
 [         inf   6.           3.5          2.66666667]
 [         inf  10.           5.5          4.        ]]
Run Code Online (Sandbox Code Playgroud)

答案我的愿望是:

   A    B   C      D
x  inf  2   1      2
y  inf  6   2.33   4
z  inf  10  3.66   6
Run Code Online (Sandbox Code Playgroud)

jor*_*ris 5

如果除以一个系列(通过选择第二个数据帧的一行),pandas 会将这个系列与第一个数据帧的列对齐,给出所需的结果:

In [75]: df1 / df2.loc['q']
Out[75]:
     A   B         C  D
x  inf   2  1.000000  2
y  inf   6  2.333333  4
z  inf  10  3.666667  6
Run Code Online (Sandbox Code Playgroud)

如果您不知道/想使用该行的名称,您可以使用将squeeze单列数据帧转换为一系列:(df1 / df2.squeeze()请参阅@EdChum 的答案)。