根据 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']]
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']]