首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过映射到字典创建新列(使用字符串包含匹配)

通过映射到字典创建新列(使用字符串包含匹配)
EN

Stack Overflow用户
提问于 2021-11-05 09:14:57
回答 1查看 36关注 0票数 0

我正在尝试基于字典df2df1中创建列Factor。但是,用于映射的Code列并不完全相同,并且字典只包含部分Code字符串。

代码语言:javascript
复制
import pandas as pd
df1 = pd.DataFrame({
    'Date':['2021-01-01', '2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-03'],
    'Ratings':[9.0, 8.0, 5.0, 3.0, 2, 3, 6, 5],
    'Code':['R:EST 5R', 'R:EKG EK', 'R:EKG EK', 'R:EST 5R', 'R:EKGP', 'R:EST 5R', 'R:OID_P', 'R:OID_P']})

df2 = pd.DataFrame({
    'Code':['R:EST', 'R:EKG', 'R:OID'],
    'Factor':[1, 1.3, 0.9]})

到目前为止,我还不能正确地映射数据帧,因为列并不完全相同。列Code不需要以"R:“开头。

代码语言:javascript
复制
df1['Factor'] = df1['Code'].map(df2.set_index('Code')['Factor'])

下面是首选输出的样子:

代码语言:javascript
复制
df3 = pd.DataFrame({
    'Date':['2021-01-01', '2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-03'],
    'Ratings':[9.0, 8.0, 5.0, 3.0, 2, 3, 6, 5],
    'Code':['R:EST 5R', 'R:EKG EK', 'R:EKG EK', 'R:EST 5R', 'R:EKGP', 'R:EST 5R', 'R:OID_P', 'R:OID_P'],
    'Factor':[1, 1.3, 1.3, 1, 1.3, 1, 0.9, 0.9]})

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-05 09:42:22

代码语言:javascript
复制
>>> df1['Code'].str[:5].map(df2.set_index('Code')['Factor'])
0    1.0
1    1.3
2    1.3
3    1.0
4    1.3
5    1.0
6    0.9
7    0.9
Name: Code, dtype: float64

>>> (df2.Code
         .apply(lambda x:df1.Code.str.contains(x))
         .T
         .idxmax(axis=1)
         .apply(lambda x:df2.Factor.iloc[x])
)

0    1.0
1    1.3
2    1.3
3    1.0
4    1.3
5    1.0
6    0.9
7    0.9
dtype: float64
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69850887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档