Skip to main content
 首页 » 编程设计

由列表索引的python数据框

2025年05月04日57jpfss

我正在尝试获取一个包含有限集中重复值的 DataFrame 列,并用索引号替换这些值,因此如果值为 [200,20,1000,1],则它们出现的索引将为 [1 ,2,3,4]。 实际数据示例为:

0    aaa 
1    aaa 
2    bbb 
3    aaa 
4    bbb 
5    bbb 
6    ccc 
7    ddd 
8    ccc 
9    ddd 

期望的输出是

0    1 
1    1 
2    2 
3    1 
4    2 
5    2 
6    4 
7    3 
8    4 
9    3 

我想更改对数字没有意义的值。仅此而已...我不关心索引的顺序,即 1 可以是 3 等等,只要顺序一致即可。也就是说,我不在乎 ['aaa','bbb','ccc','ddd']将由 [1,2,3,4] 索引或 [2,4,3,1] .

假设 DF 名称是 tbl,我只想更改列 'aaa' 中的一部分索引。让我们用 tbl_ind 表示这些索引。我想要这样做的方式是:

tmp_r = tbl[tbl_ind] 
un_r_ind = np.unique(tmp_r) 
for r_ind in range(len(un_r_ind)): 
    r_ind_ind = np.array(np.where(tmp_r == un_r_ind[r_ind])[0]) 
    for j_ind in range(len(r_ind_ind)): 
        tbl['aaa'].iloc[tbl_ind[r_ind_ind[j_ind]]] = r_ind 

它有效。而且它在大数据集上真的很慢。 Python 不允许更新 tbl['aaa'].iloc[tbl_ind[r_ind_ind]]因为它是索引列表.... 请帮助?怎么可能加快速度? 非常感谢!

请您参考如下方法:

我会构造一个包含您要替换的值的字典,然后调用 map:

In [7]: 
 
df 
Out[7]: 
  data 
0      
1  aaa 
2  bbb 
3  aaa 
4  bbb 
5  bbb 
6  ccc 
7  ddd 
8  ccc 
9  ddd 
In [8]: 
 
d = {'aaa':1,'bbb':2,'ccc':3,'ddd':4} 
df['data'] = df['data'].map(d) 
df 
 
Out[8]: 
   data 
0       
1     1 
2     2 
3     1 
4     2 
5     2 
6     3 
7     4 
8     3 
9     4