Python 使用列中的值和ID连接索引

Python 使用列中的值和ID连接索引,python,pandas,Python,Pandas,我有两个数据帧: targets = {'index':[3, 4, 5], 'sequence_id':[140366A0464161, 140366A0464178, 140366A0464189], 'target': [0, 1, 0]} data = {'sequence_id':[140366A0464161, 140366A0464161, 140366A0464161, 140366A0464178, 140366A0464178, 14036

我有两个数据帧:

targets = {'index':[3, 4, 5],
        'sequence_id':[140366A0464161, 140366A0464178, 140366A0464189],
        'target': [0, 1, 0]}


data = {'sequence_id':[140366A0464161, 140366A0464161, 140366A0464161, 140366A0464178, 140366A0464178, 140366A0464178, 140366A0464178, 140366A0464178],
        'feature_1' : ['true', 'true', 'false', 'false', 'true', 'true', 'false', 'false']}
我想创建另一个数据帧,其中
目标
中的
索引
序列id
列对应于
数据
中的
序列id
的索引


我的意思是,例如,
140366A0464161
的第三个索引将是
false
,目标为
0
。索引可能并不总是each
sequence\u id
的最后一个实例。数据中的功能也比
功能\u 1

我的预期产出是:

   index     sequence_id  feature_1 target
0      3  140366A0464161    false     0
1      4  140366A0464178    false     0
2      5  140366A0464189    true      0
就我所尝试的内容而言:我尝试了基于
序列id
的连接,但意识到它远不止于此,因为
数据中的索引不是真实的,所以这让我很困惑

提前感谢。

我相信您需要使用left join:

t = pd.DataFrame(targets)
df = pd.DataFrame(data)

#convert column to boolean
df['feature_1'] = df['feature_1'].map({'true':True, 'false':False})

#merge by index column with left join and replace missing values by `False`
df = (t.merge(df.reset_index(), on=['index','sequence_id'], how='left')
       .fillna({'feature_1':False}))

print (df)
   index     sequence_id  target  feature_1
0      3  140366A0464161       0      False
1      4  140366A0464178       1       True
2      5  140366A0464189       0      False
详细信息

print (t.merge(df.reset_index(), on=['index','sequence_id'], how='left'))
   index     sequence_id  target feature_1
0      3  140366A0464161       0       NaN
1      4  140366A0464178       1      True
2      5  140366A0464189       0       NaN
我相信您需要与left join一起:

t = pd.DataFrame(targets)
df = pd.DataFrame(data)

#convert column to boolean
df['feature_1'] = df['feature_1'].map({'true':True, 'false':False})

#merge by index column with left join and replace missing values by `False`
df = (t.merge(df.reset_index(), on=['index','sequence_id'], how='left')
       .fillna({'feature_1':False}))

print (df)
   index     sequence_id  target  feature_1
0      3  140366A0464161       0      False
1      4  140366A0464178       1       True
2      5  140366A0464189       0      False
详细信息

print (t.merge(df.reset_index(), on=['index','sequence_id'], how='left'))
   index     sequence_id  target feature_1
0      3  140366A0464161       0       NaN
1      4  140366A0464178       1      True
2      5  140366A0464189       0       NaN

据我所知,您希望为每个sequence_id取最后一个值,因为在“data”数据帧中有几个相同的sequence_id(如果您提供有关所需连接逻辑的附加信息,可能是另一种解决方案)

因此,第一步-将其转换为适当的格式:

df1 = pd.DataFrame.from_dict(targets).set_index('index')
df2 = pd.DataFrame.from_dict(data).set_index('sequence_id')

conv_df = df2.groupby('sequence_id').nth([-1]) 

Out[80]: 
               feature_1
sequence_id             
140366A0464161     false
140366A0464178     false
那么,就这样吧:

df1.merge(conv_df, left_on = 'sequence_id', right_index = True)

Out[83]: 
          sequence_id  target feature_1
index                                  
3      140366A0464161       0     false
4      140366A0464178       1     false

据我所知,您希望为每个sequence_id取最后一个值,因为在“data”数据帧中有几个相同的sequence_id(如果您提供有关所需连接逻辑的附加信息,可能是另一种解决方案)

因此,第一步-将其转换为适当的格式:

df1 = pd.DataFrame.from_dict(targets).set_index('index')
df2 = pd.DataFrame.from_dict(data).set_index('sequence_id')

conv_df = df2.groupby('sequence_id').nth([-1]) 

Out[80]: 
               feature_1
sequence_id             
140366A0464161     false
140366A0464178     false
那么,就这样吧:

df1.merge(conv_df, left_on = 'sequence_id', right_index = True)

Out[83]: 
          sequence_id  target feature_1
index                                  
3      140366A0464161       0     false
4      140366A0464178       1     false

这会将错误的目标附加到每一行,因为您已指定target=0。目标应该来自目标框架。此外,可能有更多的功能,而不仅仅是功能。\u 1。应该已经澄清:)这会将错误的目标附加到每一行,因为您分配了target=0。目标应该来自目标框架。此外,可能有更多的功能,而不仅仅是功能。\u 1。应该澄清:)索引可能并不总是每个序列id的最后一个实例。我将编辑帖子来描述这一点。索引可能并不总是每个序列id的最后一个实例。我将编辑帖子来描述这一点。