如何用Pandas按行将df2每行值除以df1对应行的值?
解决Pandas中DataFrame逐行对应除法的问题
你遇到的问题是因为原来的代码固定用了df1的第一行值,并且对齐方式不对,导致无法实现逐行对应除法的需求。下面是正确的实现方法和解释:
问题分析
你的需求核心是:
- df2的第i行所有元素,对应除以df1中索引为i的那个值(比如df2行0 ÷ df1索引0的值,df2行1 ÷ df1索引1的值,以此类推)
- 原代码
df_divided = df_2.div(df_1.iloc[0], axis='column')的问题:df_1.iloc[0]只取了df1的第一个值,导致所有行都用这个固定值做除法axis='column'是按列对齐执行除法,和你要的逐行匹配逻辑完全不符
正确实现代码
首先先确认我们的DataFrame构造和你给出的一致:
import pandas as pd # 构造df1(一维Series) df1 = pd.Series( [0.963996, 0.313856, 0.047924, 0.034164, 0.622996], index=[0, 1, 2, 3, 4] ) # 构造df2(二维DataFrame) df2 = pd.DataFrame( [ [0.648803, 0.042037, 0.405195, 0.194691], [0.212756, 0.481852, 0.317786, 0.631902], [0.360745, 0.940487, 0.447977, 0.398874], [0.046590, 0.291148, 0.336938, 0.119006] ], index=[0, 1, 2, 3] )
然后执行正确的除法操作:
df_divided = df2.div(df1, axis=0)
代码解释
df2.div(df1, axis=0)中,axis=0指定了按行对齐:- Pandas会自动匹配df2的行索引和df1的索引
- 对于df2的每一行,用该行的所有元素除以df1中相同索引对应的那个值(这个值会自动广播到整行的所有元素)
- 因为df2只有行0-3,而df1的索引0-3都有对应值,所以刚好可以完成所有行的除法操作
比如执行后,df_divided的第一行结果就是:0.648803/0.963996 ≈ 0.6730、0.042037/0.963996 ≈ 0.0436、0.405195/0.963996 ≈ 0.4203、0.194691/0.963996 ≈ 0.2020,完全符合你的需求。
内容的提问来源于stack exchange,提问作者qawert
相关产品推荐
相关产品推荐

