Python中pandas DataFrame全表百分比计算的最简代码实现方案
解决方案
最简实现(仅1行代码)
直接通过列切片选中1-4年的列,按行和Freq列做除法运算即可:
df.loc[:, '1. Year':'4. Year'] = df.loc[:, '1. Year':'4. Year'].div(df['Freq'], axis=0) * 100
说明:axis=0 指定按行对齐计算,保证每行的年份列数值都除以本行对应的Freq值,运算过程中原有的NaN值会自动保留。
通用适配实现(列名不连续场景可用)
如果1-4年列并非连续排列,可以用正则匹配所有符合「数字+. Year」格式的年份列,避免手动写列名:
year_cols = df.filter(regex=r'^\d+\. Year').columns df[year_cols] = df[year_cols].div(df['Freq'], axis=0) * 100
可选:控制精度
如果需要将百分比保留2位小数,可追加round()方法:
df.loc[:, '1. Year':'4. Year'] = df.loc[:, '1. Year':'4. Year'].div(df['Freq'], axis=0).mul(100).round(2)
内容的提问来源于stack exchange,提问作者Jaroslav Kotrba
相关产品推荐
相关产品推荐

