如何从DataFrame的window列列表中移除对应Student列的同名值
解决Pandas中移除每行window列表对应Student元素的问题
原始DataFrame定义
import pandas as pd df = pd.DataFrame( { "Student": ['Scooby','Daphne','Shaggy','Fred'], "window": [['Scooby','Daphne'], ['Daphne','Velma','Scrappy'], ['Daphne','Shaggy','Fred'],['Fred','Velma','Scrappy']] } )
原始输出
Student window 0 Scooby [Scooby, Daphne] 1 Daphne [Daphne, Velma, Scrappy] 2 Shaggy [Daphne, Shaggy, Fred] 3 Fred [Fred, Velma, Scrappy]
需求
移除每行window列列表中与对应Student列相同的元素,期望结果:
Student window 0 Scooby [Daphne] 1 Daphne [Velma, Scrappy] 2 Shaggy [Daphne, Fred] 3 Fred [Velma, Scrappy]
问题原因
你之前的代码只单独对window列调用apply,无法获取当前行对应的Student值——df['Student']是整个列的Series,不是单一行的元素,所以无法精准匹配过滤。
解决方案
使用df.apply()按行处理,同时获取当前行的Student和window值:
df['window'] = df.apply(lambda row: [item for item in row['window'] if item != row['Student']], axis=1)
axis=1参数指定按行遍历处理- lambda函数中,
row['Student']取当前行的学生名,row['window']取当前行的列表,通过列表推导式过滤掉与学生名相同的元素 - 这种方式会生成新列表,不会修改原始列表,避免潜在的副作用
执行上述代码后即可得到期望结果。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

