如何在Pandas DataFrame中将指定列除以某一列?
解决Pandas DataFrame列间除法(B、C列分别除以A列)的问题
嘿,我来帮你搞定这个列除法的需求!首先先拆解下你遇到的问题:你想让DataFrame里的B、C列各自除以A列,同时保留A列的原始值,但之前用df/df['a']没得到想要的结果,这里有两个小问题需要修正,再给你几个靠谱的实现方法:
先排查你的代码问题
- 列名大小写错误:你的DataFrame列名是大写的
A,但代码里写的是df['a'](小写),这会直接抛出KeyError,得改成df['A']才行。 - 全列除法不符合需求:就算改成
df/df['A'],会把所有列(包括A列)都除以A列,这样A列会变成全1,而你希望A列保持原来的数值,所以需要针对性地处理B、C列。
正确的实现方法
方法1:用join合并A列和计算后的B、C列
先保留原始的A列,再单独对B、C列做除法,最后合并到一起:
import pandas as pd # 创建你的示例DataFrame data = {'A': [1, 2, 3], 'B': [10, 20, 15], 'C': [10, 30, 33]} df = pd.DataFrame(data) # 执行除法并合并 result_df = df[['A']].join(df[['B', 'C']] / df['A']) print(result_df)
方法2:用assign直接重新赋值B、C列
这个方法更简洁,直接在原DataFrame的基础上重新计算B和C列的值(不会修改原DataFrame,而是返回新的DataFrame):
result_df = df.assign(B=df['B'] / df['A'], C=df['C'] / df['A']) print(result_df)
方法3:直接修改原DataFrame(谨慎使用)
如果你确实需要修改原DataFrame,可以直接对B、C列赋值,用div方法指定按行广播:
df[['B', 'C']] = df[['B', 'C']].div(df['A'], axis=0) print(df)
运行结果验证
不管用上面哪种方法,都会得到你期望的结果:
A B C 0 1 10.0 10.0 1 2 10.0 15.0 2 3 5.0 11.0
内容的提问来源于stack exchange,提问作者Amit Kumar
相关产品推荐
相关产品推荐

