我有一个很大的数据集,其中的一列包含个人名称,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 替换按字母顺序排列的第一个名称。有什么建议或更好的解决方案吗?
答案 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