首页 > 解决方案 > Pandas 使用列和 ID 中的值加入索引

问题描述

我有两个数据框:

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']}

我想创建另一个数据框,其中indexandsequence_idtargets对应于sequence_idin的索引data

我的意思是,例如,的第三个索引140366A0464161false和的目标0。索引可能并不总是每个的最后一个实例sequence_id。数据中的特征也比features_1.

我的预期输出是:

   index     sequence_id  feature_1 target
0      3  140366A0464161    false     0
1      4  140366A0464178    false     0
2      5  140366A0464189    true      0

就我所尝试的而言:我尝试了基于 the 的连接,sequence_id但意识到它远不止于此,因为索引不是真的 in data,所以这让我很难过!

提前致谢。

标签: pythonpandas

解决方案


据我了解,您希望为每个 sequence_id 取最后一个值,因为您的“数据”数据框中有几个相同的 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

所以然后只是megre它:

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

推荐阅读