检查pandas df2.出现df1的colA.Id并写入(df2).colB, df2.colC)转化为df1.col



我有两只熊猫df,它们的长度不一样。df1id列中有唯一的id。这些id在df2.colA中出现(多次)。我想将df2.colAdf1.id的所有出现列表(以及df1.id == df2.colA匹配索引的另一列)添加到df1中的新列中。可以使用匹配的df2.colA索引,也可以使用所有匹配的其他行项。

的例子:

df1.id = [1, 2, 3, 4]
df2.colA = [3, 4, 4, 2, 1, 1] 
df2.colB = [5, 9, 6, 5, 8, 7]

所以我的操作创建了如下内容:

df1.colAB = [ [[1,8],[1,7]], [[2,5]], [[3,5]], [[4,9],[4,6]] ]

我尝试了一堆映射方法,显式循环(超慢),检查isin等。

您可以使用Pandasapply来遍历df1值的每一行,同时创建包含df2.colA中所有索引的列表。这可以通过在df2.colB上使用Pandasindexloc来创建一个包含df2.colA中与df1.id中的行匹配的所有索引的列表来实现。然后,在apply本身中使用for循环来创建匹配值的列表。

import pandas as pd
# setup
df1 = pd.DataFrame({'id':[1,2,3,4]})
print(df1)
df2 = pd.DataFrame({
'colA' : [3, 4, 4, 2, 1, 1],
'colB' : [5, 9, 6, 5, 8, 7]
})
print(df2)
#code
df1['colAB'] = df1['id'].apply(lambda row:
[[row, idx] for idx in df2.loc[df2[df2.colA == row].index,'colB']])
print(df1)

df1

id             colAB
0   1  [[1, 8], [1, 7]]
1   2          [[2, 5]]
2   3          [[3, 5]]
3   4  [[4, 9], [4, 6]]

相关内容

最新更新