Python Pandas Dataframe 检查列表的列和 return 来自另一个 Dataframe 的 ID
Python Pandas Dataframe check column of lists and return ID from another Dataframe
我有一个 pandas 数据框 df1
,它有一个索引和一列列表,看起来像:
index IDList
0 [1,3,5,7]
1 [2,4,5,8]
2 [6,8,9]
3 [1,2]
我有另一个 pandas 数据框 df2
,它以 NewID 作为索引,还有一列列表,如下所示:
NewID IDList
1 [3]
2 [4,5]
3 [1,7]
4 [2]
5 [9,3]
6 [8]
7 [6]
我需要做的是,如果 df1.IDList
中的任何项目存在于 df2.IDList
中,那么 return 相关的列表 df2.NewID
。
所以 returned d1
数据框看起来像:
index IDList NewID
0 [1,3,5,7] [3,1,2,3,5]
1 [2,4,5,8] [4,2,2,6]
2 [6,8,9] [7,6,5]
3 [1,2] [3,4]
编辑: 请注意,在 df2
中,IDList 中的 ID 可以出现在多行中(请参阅 ID 3 来自 df1.IDList
并且 ID 3 出现在 df2
行 1 和 5)
我在考虑某种包含“any
”和列表理解的 np.where
语句?但不确定如何申请 df1
中的每个 IDList
,它会查看整个 df2.IDList
。也许是某种 .stack()
?或 .melt()
?这在具有 df2 的 vlookup 的电子表格中很容易...
感谢帮助...
# expand and map ids from IDList to NewID
flat_ids = pd.DataFrame({
"NewID": pd.np.repeat(df2.NewID, df2.IDList.str.len().tolist()),
"IDList": [x for l in df2.IDList for x in l]
}).set_index("IDList").NewID
# extract ids from flat ids using loc
df1['NewID'] = df1['IDList'].map(lambda x: flat_ids.loc[x].tolist())
我有一个 pandas 数据框 df1
,它有一个索引和一列列表,看起来像:
index IDList
0 [1,3,5,7]
1 [2,4,5,8]
2 [6,8,9]
3 [1,2]
我有另一个 pandas 数据框 df2
,它以 NewID 作为索引,还有一列列表,如下所示:
NewID IDList
1 [3]
2 [4,5]
3 [1,7]
4 [2]
5 [9,3]
6 [8]
7 [6]
我需要做的是,如果 df1.IDList
中的任何项目存在于 df2.IDList
中,那么 return 相关的列表 df2.NewID
。
所以 returned d1
数据框看起来像:
index IDList NewID
0 [1,3,5,7] [3,1,2,3,5]
1 [2,4,5,8] [4,2,2,6]
2 [6,8,9] [7,6,5]
3 [1,2] [3,4]
编辑: 请注意,在 df2
中,IDList 中的 ID 可以出现在多行中(请参阅 ID 3 来自 df1.IDList
并且 ID 3 出现在 df2
行 1 和 5)
我在考虑某种包含“any
”和列表理解的 np.where
语句?但不确定如何申请 df1
中的每个 IDList
,它会查看整个 df2.IDList
。也许是某种 .stack()
?或 .melt()
?这在具有 df2 的 vlookup 的电子表格中很容易...
感谢帮助...
# expand and map ids from IDList to NewID
flat_ids = pd.DataFrame({
"NewID": pd.np.repeat(df2.NewID, df2.IDList.str.len().tolist()),
"IDList": [x for l in df2.IDList for x in l]
}).set_index("IDList").NewID
# extract ids from flat ids using loc
df1['NewID'] = df1['IDList'].map(lambda x: flat_ids.loc[x].tolist())