【发布时间】:2015-06-07 12:18:20
【问题描述】:
我正在尝试获取包含来自有限集合的重复值的 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]],因为它是一个索引列表......
请帮忙?怎么可能加快这个速度?
非常感谢!
【问题讨论】:
-
您能否发布实际输入数据和所需输出,您的问题没有意义
-
您是否在问如何查找 df 中存在的一系列值以及如何全部更新它们?例如如果您的值列表是 [200,20, 1000,1] 您想要查找具有这些值的所有行,您想要将所有这些行更改为相同值还是列表中每个条目的不同值?跨度>
-
@EdChum 我添加了一个示例。谢谢。
标签: python list indexing pandas dataframe