python自定义列名和长度输出_python – 对列进行排名并选择列名

我可以建议你这样解决:

import pandas as pd

import numpy as np

df = pd.DataFrame([{'a': 15, 'b': 15, 'c': 5}, {'a': 20, 'b': 10, 'c': 7}, {'a': 25, 'b': 30, 'c': 9}])

ext = {0: 'st', 1: 'nd', 2: 'rd'}

cols = df.columns

def make_ranking(row, rank=0, is_value=False):

values = list(row[cols])

sorted_values = sorted(set(values), reverse=True)

value = sorted_values[rank] if len(sorted_values) > rank else np.nan

if not is_value:

items = [k for k, v in enumerate(values) if v == value]

value = '/'.join([cols[item] for item in items]) or np.nan

return value

for i in range(len(cols)):

df[str(i+1)+ext[i]] = df.apply(make_ranking, args=(i, False, ), axis=1)

df[str(i+1)+ext[i]+'_value'] = df.apply(make_ranking, args=(i, True, ), axis=1)

print(df)

输出:

a b c 1st 1st_value 2nd 2nd_value 3rd 3rd_value

0 15 15 5 a/b 15 c 5 NaN NaN

1 20 10 7 a 20 b 10 c 7

2 25 30 9 b 30 a 25 c 9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值