Python Pandas实现表格逐行排序并返回对应原列标签的新DataFrame方法
实现方法
直接用pandas就能快速实现,完整代码如下:
import pandas as pd # 读取CSV,指定逗号为小数分隔符 df = pd.read_csv("your_file.csv", decimal=",") # 逐行处理得到公司排名 def get_rank(row): # 排除日期列后按数值降序排序,返回对应的公司名 return row.drop("Date").sort_values(ascending=False).index.tolist() # 生成结果表 rank_cols = df.apply(get_rank, axis=1).to_list() result = pd.concat([ df["Date"], pd.DataFrame(rank_cols, columns=["1", "2", "3"]) ], axis=1) # 可选:导出结果到CSV # result.to_csv("rank_result.csv", index=False)
关键逻辑说明
- 读取文件时通过
decimal=","参数直接适配你用逗号作为小数分隔符的数值格式,无需额外做格式转换。 - 逐行处理时调用
sort_values(ascending=False)做降序排序,排序后取索引值就是对应的公司列名,刚好匹配你要的排名规则。 - 最后拼接原Date列和生成的排名列,就得到你要的结构,新列名1、2、3对应从高到低的排名。
如果你喜欢更精简的写法,也可以把行处理逻辑合并为lambda表达式:
import pandas as pd df = pd.read_csv("your_file.csv", decimal=",") result = df[["Date"]].join( df.drop("Date", axis=1) .apply(lambda x: x.sort_values(ascending=False).index, axis=1) .to_list(), lsuffix="", rsuffix="" ).set_axis(["Date", "1", "2", "3"], axis=1)
内容的提问来源于stack exchange,提问作者Martin Kunze
相关产品推荐
相关产品推荐

