在Pandas中创建一个新列,用于描述列表列中的所有元素



我有两个数据帧:

df1 = pd.DataFrame({"ID":[1, 2, 3, 4], 
"item":[[22, 78], [78], [78,79], [78,456,254]}
df2 = pd.DataFrame({"IDs":[1,2], [3], [1,3,4], [3,4]}

并且期望的输出是具有额外列的CCD_ 1,该额外列具有描述CCD_。理想情况下无重复,并按外观降序排列:

df2 = pd.DataFrame({"IDs":[1,2], [3], [1,3,4], [3,4],
"all_items":[78,22], [78], [78,79,22,456,254], [78,79,456,254]}

我猜我应该使用CCD_ 3来添加新的";all_items"列,并在第一步中使用CCD_ 4进行循环。我只是搞不清楚它是如何与Pandas中的列表列一起工作的。如果能得到解决方案,我将不胜感激。非常感谢。

您可以执行explode+map,然后groupby获得unique

df2['new'] = df2['IDs'].explode().map(dict(zip(df1['ID'],df1['item']))).explode().groupby(level=0).unique()
df2
Out[47]: 
IDs                     new
0     [1, 2]                [22, 78]
1        [3]                [78, 79]
2  [1, 3, 4]  [22, 78, 79, 456, 254]
3     [3, 4]      [78, 79, 456, 254]

最新更新