gpt4 book ai didi

python - 如果数据框中列表中的任何值在另一个列表中,则过滤 Pandas 数据框行

转载 作者:太空狗 更新时间:2023-10-30 00:52:47 25 4
gpt4 key购买 nike

我有一个 pandas dataframe,它在 split_categories 列中包含一个列表:

df.head()

album_id categories split_categories
0 66562 480.494 [480, 494]
1 114582 128 [128]
2 4846 5 [5]
3 1709 9 [9]
4 59239 105.104 [105, 104]

我想选择特定列表 [480、9、104] 中至少有一个类别的所有行。

预期输出:

  album_id categories split_categories
0 66562 480.494 [480, 494]
3 1709 9 [9]
4 59239 105.104 [105, 104]

我设法使用 apply 做到这一点:

def match_categories(row):
selected_categories = [480, 9, 104]
result = [int(i) for i in row['split_categories'] if i in selected_categories]
return result

df['matched_categories'] = df.apply(match_categories, axis=1)

但是这段代码在生产环境中运行,而且这种方式花费的时间太长(我为包含列表的多个列运行它)

有没有办法运行类似的东西:

df[~(df['split_categories'].anyvalue.isin([480, 9, 104]))]

谢谢

最佳答案

您可以将每个列表转换为集合,获取交集并转换为 bool 值:

L = [480, 9, 104]
mask = np.array([bool(set(map(int, x)) & set(L)) for x in df['split_categories']])

或者将list column转换为DataFrame,转换为float并与isin比较:

df1 = pd.DataFrame(df['split_categories'].values.tolist(), index=df.index)
mask = df1.astype(float).isin(L).any(axis=1)

df = df[mask]
print (df)
album_id categories split_categories
0 66562 480.494 [480, 494]
3 1709 9 [9]
4 59239 105.104 [105, 104]

关于python - 如果数据框中列表中的任何值在另一个列表中,则过滤 Pandas 数据框行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54214174/

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