首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用子字符串和排序连接到数据帧

使用子字符串和排序连接到数据帧
EN

Stack Overflow用户
提问于 2018-06-21 13:46:06
回答 1查看 57关注 0票数 0

我希望将一些数据从数据添加到另一个数据中。问题是,我需要构建一个键,以便能够映射两个dataframe之间的值。因此,我构建了一个示例,使用df1有一个列"RAW“。该列包含一个需要拆分的字符串,前3个字符从左边,3个字符从右边,然后按字母顺序排序。如果"RAW“是"RTYdfhgvisdhQWE”,我想使用的字符串是QWERTY。然后,需要使用代码和日期将其映射到df2中的适当代码。

代码语言:javascript
运行
复制
import pandas as pd

df1 = pd.DataFrame(columns=["RAW", "DATE", "VALUE"])

df1.at[0, 'RAW'] = 'QWE/RTY'
df1.at[0, 'DATE'] = '2012-01-01'
df1.at[0, 'VALUE'] = 'TEST0'
df1.at[1, 'RAW'] = 'RTY/AZE'
df1.at[1, 'DATE'] = '2015-06-11'
df1.at[1, 'VALUE'] = 'TEST1'

df2 = pd.DataFrame(columns=["CODE", "DATE", "RES"])
df2.at[0, 'CODE'] = 'QWERTY'
df2.at[0, 'DATE'] = '2012-03-01'
df2.at[0, 'RES'] = 1.1
df2.at[0, 'CODE'] = 'QWERTY'
df2.at[0, 'DATE'] = '2012-01-01'
df2.at[0, 'RES'] = 1.3
df2.at[1, 'CODE'] = 'AZERTY'
df2.at[0, 'DATE'] = '2012-06-11'
df2.at[1, 'RES'] = 1.4


def buildcodefromrow(mystring):
    return [ mystring[0:3] + mystring[4:3] if  mystring[0:2] < mystring[4:6] else  mystring[4:6] + mystring[0:2]]

df1['BUILTCODE'] = buildcodefromrow(df1['RAW'])
df1 = pd.merge(df1, df2,  left_on=['BUILTCODE', 'DATE'], right_on=['CODE', 'DATE'])

任何帮助都很感激!

EN

Stack Overflow用户

回答已采纳

发布于 2018-06-21 14:12:46

buildcodefromrow函数更改为:

代码语言:javascript
运行
复制
def buildcodefromrow(mystring):
    return mystring[0:3] + mystring[4:] if  mystring[0:3] < mystring[4:] else  mystring[4:] + mystring[0:3]

并且可以使用以下方法实现df1中的df1行:

代码语言:javascript
运行
复制
df1['BUILTCODE'] = df1['RAW'].apply(buildcodefromrow)

合并后的df1应该如下所示:

代码语言:javascript
运行
复制
    RAW      DATE       VALUE   BUILTCODE  CODE     RES
0   QWE/RTY 2012-01-01  TEST0   QWERTY     QWERTY   1.3
1   RTY/AZE 2015-06-11  TEST1   AZERTY     AZERTY   1.4

如果这不是您期望的输出,请用预期的输出编辑您的问题。谢谢

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50970156

复制
相关文章

相似问题

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