按字母顺序重命名Pandas中的列值

时间:2019-04-30 09:24:26

标签: python pandas

我有一个很大的数据集,其中的一列包含个人名称,value_counts()总共有60个名称。我不想在分析数据时显示这些名称,而是想将它们重命名为 participant_1,...,participant_60

我还想按字母顺序重命名值,以便以后可以找到谁是参与者_1

我首先创建了一个新名称列表:

newnames = [f"participant_{i}" for i in range(1,61)]

然后,我尝试使用功能df.replace

df.replace('names', 'newnames')

但是,我不知道在哪里指定我要 participant_1 替换按字母顺序排列的第一个名称。有什么建议或更好的解决方案吗?

3 个答案:

答案 0 :(得分:3)

如果需要按字母顺序替换列中的值,请使用Categorical.codes

df = pd.DataFrame({
        'names':list('bcdada'),

})

df['new'] = [f"participant_{i}" for i in pd.Categorical(df['names']).codes + 1]
#alternative solution
#df['new'] = [f"participant_{i}" for i in pd.CategoricalIndex(df['names']).codes + 1]

print (df)
  names            new
0     b  participant_2
1     c  participant_3
2     d  participant_4
3     a  participant_1
4     d  participant_4
5     a  participant_1

答案 1 :(得分:0)

使用rename

df.rename({'old_column_name':'new_column_nmae',......},axis=1,inplace=1)

您可以使用dict理解来生成映射-

mapper = {k: v for (k,v) in zip(sorted(df.columns), newnames)}

答案 2 :(得分:0)

如果我正确理解,您想替换列值而不是列名。

使用旧名称和新名称创建一个dict,然后可以使用df.replace

import pandas as pd

df = pd.DataFrame()
df['names'] = ['sam','dean','jack','chris','mark']

x = ["participant_{}".format(i+1) for i in range(len(df))]

rep_dict = {k:v for k,v in zip(df['names'].sort_values(), x)}

print(df.replace(rep_dict))

输出:

        names
0  participant_5
1  participant_2
2  participant_3
3  participant_1
4  participant_4