我希望将一些数据从一个数据框追加到另一个。 问题是我需要构建一个密钥,以便能够在两个数据框之间映射值。 所以我建立了一个示例,用df1有一列“ RAW”。此列包含一个需要拆分的字符串,左起第三个字符,右起第3个字符,然后按字母顺序排序。意思是如果“ RAW”是“ RTYdfhgvisdhQWE”,我要使用的字符串是QWERTY。 然后需要使用CODE和DATE将其映射到df2中的正确CODE。
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'])
任何帮助表示赞赏!
答案 0 :(得分:0)
将您的buildcodefromrow
函数更改为以下内容:
def buildcodefromrow(mystring):
return mystring[0:3] + mystring[4:] if mystring[0:3] < mystring[4:] else mystring[4:] + mystring[0:3]
和df1中的BUILTCODE
行可以使用:
df1['BUILTCODE'] = df1['RAW'].apply(buildcodefromrow)
合并的df1应该如下所示:
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
如果这不是您期望的输出,请使用期望的输出编辑您的问题。 谢谢