如何在Pandas DataFrame中添加列总和行并按最大值排序
在Pandas DataFrame中添加总和行并按最大值排序
嘿,我来帮你一步步解决这个问题,同时也会兼顾你提到的文本片段处理~
一、添加各列总和的行
不管你的DataFrame是纯数值型还是包含文本列(比如你提供的abst1),我们都能精准添加总和行:
情况1:纯数值型DataFrame
先看个简单示例,假设我们有这样的DataFrame:
import pandas as pd data = { '销量': [120, 90, 150], '利润': [30, 15, 40], '库存': [80, 100, 60] } df = pd.DataFrame(data)
直接用loc添加总和行就行,记得加上numeric_only=True确保只对数值列求和:
# 添加标记为「总计」的行,计算各列总和 df.loc['总计'] = df.sum(numeric_only=True)
情况2:包含文本列的DataFrame
如果你的DataFrame里有像abst1这样的文本字段(比如存储文章摘要),我们要避免对文本列求和,只针对数值列操作:
# 假设你的DataFrame有文本列'abst1'和数值列'引用量', '下载量' # 先筛选出所有数值类型的列 numeric_cols = df.select_dtypes(include='number').columns # 给数值列添加总和,文本列可以标记为「总计」或者留空 df.loc['总计', numeric_cols] = df[numeric_cols].sum() df.loc['总计', 'abst1'] = '总计行'
二、按每行最大值排序
这里的“按最大值排序”,应该是指根据每行的数值最大值来排序。我们可以先计算每行的最大值,再以此为依据排序:
常规排序(包含总和行)
如果想把总和行也参与排序:
# 计算每行的最大值,临时存为新列 df['行最大值'] = df.select_dtypes(include='number').max(axis=1) # 按「行最大值」降序排序,排序后删掉临时列 df_sorted = df.sort_values(by='行最大值', ascending=False).drop('行最大值', axis=1)
保留总和行在末尾
如果希望总和行始终在最后,先单独处理非总和行,再合并回去:
# 把总和行单独提出来 total_row = df.loc[['总计']] # 剩下的行排除总和行 df_rest = df.drop('总计') # 给非总和行计算最大值并排序 df_rest['行最大值'] = df_rest.select_dtypes(include='number').max(axis=1) df_rest_sorted = df_rest.sort_values(by='行最大值', ascending=False).drop('行最大值', axis=1) # 合并排序后的行和总和行,总和行在最后 df_final = pd.concat([df_rest_sorted, total_row])
关于你提供的文本片段
你给出的abst1是一段文章摘要文本,在处理这类文本列时,记得始终用select_dtypes(include='number')或者numeric_only=True来限定数值列的操作,避免对文本执行求和、取最大值这类无效操作导致报错。
内容的提问来源于stack exchange,提问作者Rafaela Bennett
相关产品推荐
相关产品推荐

