1

id对每个人都有一列(具有相同 id 的数据属于一个人)。我想要这些:

  1. 现在该id列不是基于编号的,而是 10 位数字。如何id使用整数重置,例如1, 2, 3, 4

例如:

id     col1
12a4   summer
12a4   goest
3b     yes
3b     No
3b     why
4t     Hi

输出:

id   col1
1    summer
1    goest
2    yes
2    No
2    why
3    Hi 
4

3 回答 3

1

使用,factorize

df['id']=df['id'].factorize()[0]+1

输出:

   id    col1
0   1  summer
1   1   goest
2   2     yes
3   2      No
4   2     why
5   3      Hi

另一种选择是使用分类数据:

df['id'] = df['id'].astype('category').cat.codes + 1
于 2021-03-17T23:19:38.810 回答
0

尝试:

df.reset_index(inplace=True)

例子:

import pandas as pd
import numpy as np

df = pd.DataFrame([('bird', 389.0),
                   ('bird', 24.0),
                   ('mammal', 80.5),
                   ('mammal', np.nan)],
                  index=['falcon', 'parrot', 'lion', 'monkey'],
                  columns=('class', 'max_speed'))
print(df)
         class  max_speed
falcon    bird      389.0
parrot    bird       24.0
lion    mammal       80.5
monkey  mammal        NaN

这是看起来的样子,让我们替换索引:

df.reset_index(inplace=True)
print(df)
    index   class  max_speed
0  falcon    bird      389.0
1  parrot    bird       24.0
2    lion  mammal       80.5
3  monkey  mammal        NaN
于 2021-03-17T23:15:57.490 回答
0
import pandas as pd
import numpy as np

df = pd.DataFrame({'id': ['12a4', '12a4', '3b', '3b', '3b', '4t'],
                   'col1': ['summer', 'goest', 'yes', 'No', 'why', 'Hi']})

unique_id = df.drop_duplicates(subset=['id']).reset_index(drop=True)

id_dict = dict(zip(unique_id['id'], unique_id.index))

df['id'] = df['id'].apply(lambda x: id_dict[x])

df.drop_duplicates(subset=['id']).reset_index(drop=True)删除 column 中的重复行id

# print(unique_id)
     id    col1
0  12a4  summer
1    3b     yes
2    4t      Hi

dict(zip(unique_id['id'], unique_id.index))id从列和索引值创建字典。

# print(id_dict)

{'12a4': 0, '3b': 1, '4t': 2}

df['id'].apply(lambda x: id_dict[x])使用 dict 中的值设置列值映射。

# print(df)

   id    col1
0   0  summer
1   0   goest
2   1     yes
3   1      No
4   1     why
5   2      Hi
于 2021-03-18T00:45:51.287 回答