重构 DataFrame 以将值与其他列号匹配

问题描述 投票:0回答:1

我有以下数据框

Name  Rank1  Rank2  Rank3  Rank4  Rank5
Name1  Title1  Title3  Title7  Title2  Title6
Name2  Title3  Title2  Title6  Title5  Title4
Name3  Title2  Title5  Title3  Title6  Title4
Name4  Title4  Title6  Title1  Title5  Title2

我想让数据框看起来像这样

    Name  Title1  Title2  Title3  Title4  Title5  Title6  Title7
    Name1       1       4       2      10      10       5       3
    Name2      10       2       1       4       4       3      10
    Name3      10       1       3       5       2       4      10
    Name4       3       5      10       1       4       2      10

关于如何做到这一点有什么建议吗?

pandas dataframe data-manipulation
1个回答
0
投票

使用以下代码。

import pandas as pd
import numpy as np 
def find_rank(row, v):
    rank = np.where(row == v)[0]
    if len(rank) == 0:
        return 10
    else:
        return rank[0]

for v in ['Title1', 'Title2', 'Title3', 'Title4', 'Title5', 'Title6']:
    df[v] = df.apply(find_rank, v = v, axis = 1)

df = df.drop(['Rank1', 'Rank2', 'Rank3', 'Rank4', 'Rank5'], axis = 1)

此代码查找该值并返回其每行的索引。
如果一行中没有值,则返回 10。

© www.soinside.com 2019 - 2024. All rights reserved.