gpt4 book ai didi

python - 如何将值映射到位?

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:28 27 4
gpt4 key购买 nike

我有一个这样的数据框:

df = pd.DataFrame({'c1': list('aba'), 'c2': list('aaa'), 'ignore_me': list('bbb'), 'c3': list('baa')})

c1 c2 ignore_me c3
0 a a b b
1 b a b a
2 a a b a

和一个看起来像这样的字典

d = {'a': "foo", 'b': 'bar'}

我现在想将 d 的值映射到与 regex ^c\d+$ 匹配的列>.

我可以

df.filter(regex='^c\d+$').apply(lambda x: x.map(d))

c1 c2 c3
0 foo foo bar
1 bar foo foo
2 foo foo foo

但是,会丢失所有与正则表达式不匹配的列。

因此,我可以这样做:

tempdf = df.filter(regex='^c\d+$')

df.loc[:, tempdf.columns] = tempdf.apply(lambda x: x.map(d))

它给出了想要的输出

    c1   c2 ignore_me   c3
0 foo foo b bar
1 bar foo b foo
2 foo foo b foo

是否有更智能的解决方案来避免临时数据框?

最佳答案

绝对有,使用str.contains

df.columns.str.contains(r'^c\d+$') # use raw strings, it's good hygene
# array([ True, True, False, True])

将掩码传递给loc:

df.loc[:, df.columns.str.contains(r'^c\d+$')] = df.apply(lambda x: x.map(d))

如果你想尽可能高效,

m = df.columns.str.contains(r'^c\d+$')
df.loc[:, m] = df.loc[:, m].apply(lambda x: x.map(d))

df

c1 c2 ignore_me c3
0 foo foo b bar
1 bar foo b foo
2 foo foo b foo

关于python - 如何将值映射到位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56419136/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com