这是数据-
Account_Number Dummy_Account
1050080713252 ACC0000000000001
1050223213427 ACC0000000000002
1050080713252 ACC0000000169532
1105113502309 ACC0000000123005
1100043521537 ACC0000000000004
1100045301840 ACC0000000000005
1105113502309 ACC0000000000040
行1,3
在Account_Number
中有重复的值。行4,7
也是如此。
我需要将Account_Number
中的重复值替换为Dummy_Account
中的相同值。{{{cd6}两行的值都应该相同。但我不想直接替换,而是希望保留原始映射。在
我的预期产出是-
^{pr2}$由于ACC0000000169532
是重复的Dummy_Account
w.r.tAccount_Number
,所以我想创建一个用ACC0000000000001
替换它的查找
我尝试过的
我开始创建一个dict
这样-
maps = dict(zip(df.Dummy_Account, df.Account_Number))
我想创建一个dict
,它的原始Dummy_Account
值为key
,新的Dummy_Account
值为value
但我有点迷路了。我的数据集很大,所以我也在寻找优化的解决方案。在
使用
^{pr2}$drop_duplicates
,创建一个要传递给map
的序列:计时
请注意,性能将取决于您的实际数据。在
选项1
我会将
groupby
和transform
与first
一起使用。transform
将在所有实例中广播第一个遇到的值 这群人的。在选项2
^{pr2}$使用Numpy的
np.unique
获得第一个值的索引和一个逆值。索引(
idx
)标识了'Account_Number'
的第一个唯一位置。我用这个来切片'Dummy_Account'
。然后,我使用逆数组(inv
)将唯一值放回原位,但我将其用于与重合数组处于相同位置的对象。在选项3}。
或者使用
pd.factorize
和{与选项2类似,但是我让
duplicated
扮演识别第一个值的位置的角色。然后,我用得到的布尔数组对重合值进行切片,然后用pd.factorize
的结果将其反转。f
与选项2中的inv
起着相同的作用。在时间测试
结果
设置
使用^{} 并将重复的值替换为
ffill
:相关问题 更多 >
编程相关推荐