将列表列表中的值映射到 Pandas 数据框列

Posted

技术标签:

【中文标题】将列表列表中的值映射到 Pandas 数据框列【英文标题】:Map Values from List of Lists to Pandas Dataframe Column 【发布时间】:2021-08-21 17:09:02 【问题描述】:

我有以下格式的列表:

l = [[1,2,3,4], [5,6], [7], [8,9,10]]

以及带有以下列的 pandas 数据框

Value
1
3
5
9

我的目标是遍历数据框中值列中的每一行,以查找该值所在的列表。我想创建一个新列,其中包含该值所在的列表中的第一个值。结果看起来像这样。

Value List_Val
1 1
3 1
5 5
9 8

任何帮助将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

试试:

l = [[1, 2, 3, 4], [5, 6], [7], [8, 9, 10]]

df["List_Val"] = df["Value"].apply(
    lambda x: next((subl[0] for subl in l if x in subl), np.nan)
)

print(df)

打印:

   Value  List_Val
0      1         1
1      3         1
2      5         5
3      9         8

【讨论】:

【参考方案2】:

试试explode 然后map

s = pd.Series(l).explode()
s.index = s.groupby(level=0).transform('first')
df['List_val'] = df['Value'].map(dict(zip(s,s.index)))
df
Out[36]: 
   Value  List_val
0      1         1
1      3         1
2      5         5
3      9         8

【讨论】:

【参考方案3】:

让我们使用字典理解和map

df['list_val'] = df['Value'].map(v:i[0] for i in l for v in i)

输出:

   Value  list_val
0      1         1
1      3         1
2      5         5
3      9         8

【讨论】:

以上是关于将列表列表中的值映射到 Pandas 数据框列的主要内容,如果未能解决你的问题,请参考以下文章

将数据框列中的值附加到列表

以字符串形式存储在 Pandas 数据框列中的解析列表

根据每个句子的第一个单词将 pandas 数据框列中的字符串列表分解为新列

循环遍历 pandas 数据框列中的列表元素以在新列中返回列表

数据框列中的嵌套列表,提取数据框列中列表的值 Pyspark Spark

检查列表中的单词并在 pandas 数据框列中删除这些单词