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



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

我还想按字母顺序重命名值,以便以后能够找出谁在participant_1

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

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

然后我尝试使用函数df.replace

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

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

如果需要按

字母顺序替换列中的值,请使用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

使用rename

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

您可以使用这样的字典理解来生成映射 -

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

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

创建一个包含old_names和new_names的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

最新更新