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)
如果除以一个系列(通过选择第二个数据帧的一行),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 的答案)。