简体   繁体   English

根据另一个列表从pandas dataframe列中的列表中删除值

[英]Removing values form a list in pandas dataframe column based on another list

I have a column in a dataframe which contains lists. 我在包含列表的数据框中有一列。 I want to be able to remove elements from these lists based on elements that I have in another list (as shown below). 我希望能够基于另一个列表中的元素从这些列表中删除元素(如下所示)。

I tried to use list comprehension but it seems to give no result. 我尝试使用列表理解,但似乎没有任何结果。

import pandas as pd

sys_list = ['sys1', 'sys2', 'sys3']
df = pd.DataFrame({'A':[['sys1', 'sys2', 'user1'], 
                        ['user3', 'user6', 'user1'], 
                        ['sys1', 'sys2', 'sys3']]})

df['A'] = [item for item in df['A'] if item not in sys_list]

print(df)

                       A
0    [sys1, sys2, user1]
1  [user3, user6, user1]
2     [sys1, sys2, sys3]

I need to achieve this: 我需要实现以下目标:

                       A
0                [user1]
1  [user3, user6, user1]
2                     []

Any thoughts? 有什么想法吗?

with apply : apply

df.A.apply(lambda x: [i for i in x if i not in sys_list])

0                  [user1]
1    [user3, user6, user1]
2                       []
Name: A, dtype: object

Use Series.apply : 使用Series.apply

df['B'] = df['A'].apply(lambda x: [item for item in x if item not in set(sys_list)])
print (df)
                       A                      B
0    [sys1, sys2, user1]                [user1]
1  [user3, user6, user1]  [user3, user6, user1]
2     [sys1, sys2, sys3]                     []

Or similar list comprehension like deleted answer: 或类似的列表理解,如删除的答案:

df['B'] = [[item for item in l if item not in set(sys_list)] for l in df['A']]

Or solution with set s with set.difference : 或者用setset.difference解决方案:

df['B'] = df['A'].map(set(sys_list).difference).map(list)

You may use sets for a better performance (this approach assumes that the order within the lists is not important, as it will change): 您可以使用sets来获得更好的性能(此方法假定列表中的顺序并不重要,因为它会发生变化):

sys_set = set(['sys1', 'sys2', 'sys3'])

df['A'] = (df.A.map(set)-sys_set).map(list)

print(df)
                    A
0                [user1]
1  [user6, user1, user3]
2                     []

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Select 列动态在 Pandas dataframe 基于列表或另一列中的值 - Select column dynamically in Pandas dataframe based on values in a list or another column 根据列列表值筛选 pandas dataframe - Filter pandas dataframe based on column list values 基于Pandas DataFrame拆分的列值列表 - Pandas dataframe split based list of column values 遍历一列并根据 PANDAS dataframe 中另一列的值将值添加到列表 - Iterating through one column and adding values to list based on value of another column in a PANDAS dataframe 获取基于另一列的列值,其中包含pandas dataframe中的字符串列表 - get column value based on another column with list of strings in pandas dataframe pandas dataframe 中的新列基于现有列值和条件列表 - New column in pandas dataframe based on existing column values with conditions list 基于另一列的值列表的一列中的 Pandas 查找值 - Pandas lookup values in one column based on list of values of another column 根据另一列的值在pandas的列中创建值列表 - create a list of values in a column in pandas based on values of another column 返回一个列表,其中包含 dataframe 列值,这些值是根据另一个列表排序的 - Return a list with dataframe column values ordered based on another list 根据另一个数据框中的值在数据框中创建列表列 - Creating a list column in a dataframe based on values in another dataframe
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM