tôi có thể đề nghị bạn để giải quyết nó như thế này:
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)
Kết quả:
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
Nguồn
2016-01-23 10:08:52
Bạn đã thử mọi thứ chưa? – vk1011
Điều duy nhất tôi đã quản lý để hoàn thành là chọn cột tối đa. Tôi đã thử đặt hàng các cột, nhưng điều này đặt hàng các cột trên tổng số tiền xuống cột, nếu điều đó có ý nghĩa. – DGraham