我有一个大型数据集,其中有一列包含个人姓名,总共有 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