gpt4 book ai didi

python - 从 df 列的列表中过滤项目

转载 作者:行者123 更新时间:2023-12-02 16:12:03 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何创建一个新列,其中的值来自列类型为列表的另一列。如果值满足条件,我很难从所述列表中选择特定值,而不是整个列表。

更具体地说,我想创建一个新列,其值包含“评论家”。所以结果应该是这样的:

ID        LIST_COLUMN                                   NEW COLUMN 
id1 ['moviecritic', 'movie', 'disney'] moviecritic
id2 ['musiccritic', 'Metallica', 'rock'] musiccritic
id3 ['bookcritic', 'young adult', 'literature'] bookcritic

我试过以下,但它返回一个 ValueError(值的长度 (0) 与索引的长度 (3) 不匹配)

import pandas as pd
data = [['id1', ['moviecritic', 'movie', 'disney']],['id2',['musiccritic', 'Metallica', 'rock']],
['id3',['bookcritic', 'young adult', 'literature']]]
df = pd.DataFrame(data,columns=['ID','LIST_COLUMN'])


df['NEW_COLUMN'] = [x for x in row.df['LIST_COLUMN'] if 'critic' in x]

最佳答案

您可以explode 列表,然后过滤到您想要的值并分配回去(它将对齐索引,explode 保留)。因为你永远不会有超过 1 个带有“critic”的值,所以这会起作用。

s = df['LIST_COLUMN'].explode()
df['new_column'] = s[s.str.contains('critic')]

ID LIST_COLUMN new_column
0 id1 [moviecritic, movie, disney] moviecritic
1 id2 [musiccritic, Metallica, rock] musiccritic
2 id3 [bookcritic, young adult, literature] bookcritic

如果可能有多个匹配项,您将需要以某种方式沿原始索引聚合,例如您可以str.join:

df['new_column'] = s[s.str.`contains('critic')].groupby(level=0).agg(','.join)

关于python - 从 df 列的列表中过滤项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67741167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com