我有以下数据框表:
df = pd.DataFrame({'A': [0, 1, 0],
'B': [1, 1, 1]},
index=['2020-01-01', '2020-02-01', '2020-03-01'])
我正在尝试实现将出现的每个值都替换为一个递增的数字。我正在寻找类似的东西:
df.replace(1, value=3)
效果很好,但我需要增加数字(而不是3)(因为我想将其用作ID)
number += 1
如果我将它们结合在一起,那么它将不起作用(或者至少我无法找到正确的语法),我想获得以下结果:
df = pd.DataFrame({'A': [0, 2, 0],
'B': [1, 3, 4]},
index=['2020-01-01', '2020-02-01', '2020-03-01'])
注意:由于表具有2600列和5000行,因此我不能使用任何依赖于列或行名规范的命令。
df.values
可以在副本上进行按元素分配。
更具体地说,range
从开始1
到1的个数(包括1)(包括在内)被分配到1
值数组中元素的位置。然后将分配的数组放回原始数据帧中。
(数据为给定)
1.行优先排序(OP想要的)
arr = df.values
mask = (arr > 0)
arr[mask] = range(1, mask.sum() + 1)
for i, col in enumerate(df.columns):
df[col] = arr[:, i]
# Result
print(df)
A B
2020-01-01 0 1
2020-02-01 2 3
2020-03-01 0 4
2.列优先排序(另一种可能性)
arr_tr = df.values.transpose()
mask_tr = (arr_tr > 0)
arr_tr[mask_tr] = range(1, mask_tr.sum() + 1)
for i, col in enumerate(df.columns):
df[col] = arr_tr[i, :]
# Result
print(df)
A B
2020-01-01 0 2
2020-02-01 1 3
2020-03-01 0 4
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句