替换是按行进行的,并且会在dict内覆盖两次值?[英] Is replace row-wise and will overwrite the value within the dict twice?

本文是小编为大家收集整理的关于替换是按行进行的,并且会在dict内覆盖两次值?的处理方法,想解了替换是按行进行的,并且会在dict内覆盖两次值?的问题怎么解决?替换是按行进行的,并且会在dict内覆盖两次值?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

假设我有以下数据集

lst = ['u', 'v', 'w', 'x', 'y']
lst_rev = list(reversed(lst))
dct = dict(zip(lst, lst_rev))

df = pd.DataFrame({'A':['a', 'b', 'a', 'c', 'a'],
                   'B':lst},
                   dtype='category')

现在我想 replace 通过 dct

将 df 中 B 列的值

我知道我能做到

df.B.map(dct).fillna(df.B)

得到预期的输出,但是当我使用 replace 进行测试时(根据我的想法,这更直接),我失败了

输出如下图

df.B.replace(dct)
Out[132]: 
0    u
1    v
2    w
3    v
4    u
Name: B, dtype: object

和之前的不一样

df.B.map(dct).fillna(df.B)
Out[133]: 
0    y
1    x
2    w
3    v
4    u
Name: B, dtype: object

我可以认为发生这种情况的原因,但是为什么呢?

0    u --> change to y then change to u
1    v --> change to x then change to v
2    w
3    v
4    u

感谢您的帮助.

推荐答案

因为replace一直在应用字典

df.B.replace({'u': 'v', 'v': 'w', 'w': 'x', 'x': 'y', 'y': 'Hello'})

0    Hello
1    Hello
2    Hello
3    Hello
4    Hello
Name: B, dtype: object
<小时>

使用给定的 dct 'u' -> 'y' 然后 'y' -> 'u'.

本文地址:https://www.itbaoku.cn/post/1727924.html