根据 pandas 数据框中的条件从列表中删除元素

Remove element from a list based on condition in pandas dataframe

a= {'A' : [1, 2,3,4],
'B' : ['FOOTBALL','BASKETBALL','HANDBALL','VOLLEYBALL'],
'C' : [[5,10,15,40],[1,4],[20,10,40],[10,40]]
}

如果 B 与 FOOTBALL 不同,如何从 C 中删除元素 40 像这样:

    A   B   C
0   1   FOOTBALL    [5, 10, 15, 40]
1   2   BASKETBALL  [1, 4]
2   3   HANDBALL    [20, 10]
3   4   VOLLEYBALL  [10]

您可以过滤掩码的两侧,并使用 lambda 函数删除列表中的 40

df = pd.DataFrame(a)

m = df['B'].ne('FOOTBALL')
df.loc[m, 'C'] = df.loc[m, 'C'].apply(lambda x: [y for y in x if y!=40])
print (df)
   A           B                C
0  1    FOOTBALL  [5, 10, 15, 40]
1  2  BASKETBALL           [1, 4]
2  3    HANDBALL         [20, 10]
3  4  VOLLEYBALL             [10]

选择:

m = df['B'].ne('FOOTBALL')
df.loc[m, 'C'] = [[y for y in x if y!=40] for x in df.loc[m, 'C']]