【发布时间】:2021-03-12 13:49:41
【问题描述】:
我有一个这样的数据框:
ID Toes
0 1 []
1 2 ['LF1', 'LF2']
2 4 ['LF1']
3 4 ['LF2']
4 5 ['LF1', 'LF4', 'RR1', 'RR2']
5 6 []
6 7 ['LF2', 'RF1', 'RF2']
7 8 ['LF1', 'LF2', 'LF3', 'LF4', 'LF5']
Toes 列在蜥蜴中缺少脚趾,它们总共有 20 个脚趾。我有一个给定的个体,我们称它为 Si,并想搜索它可能的匹配项。例如,这个有 2 个脚趾缺失:
Si_toes = ['LF1', 'LF2'].
我如何找到唯一允许缺失脚趾的是当前脚趾的所有个体,即 ['LF1', 'LF2'] - 但不允许其他缺失值?
预期的结果应该是:
# for Si where Si_toes = ['LF1', 'LF2']
0 1 []
1 2 ['LF1', 'LF2']
2 4 ['LF1']
3 4 ['LF2']
5 6 []
我试过了
toes = ['LF1', 'LF2']
df.loc[df.Toes.apply(lambda x: bool(set(x).intersection( list(toes) )))]
但这会返回所有包含 ['LF1', 'LF2'] 的内容,因此它包括下面的这些,这是我不想要的。
4 5 ['LF1', 'LF4', 'RR1', 'RR2']
6 7 ['LF2', 'RF1', 'RF2']
7 8 ['LF1', 'LF2', 'LF3', 'LF4', 'LF5']
也试过了:
toes = ['LF1', 'LF2']
df.loc[df.Toes.map(set(['LF1', 'LF2']).issubset)]
但这会返回所有包含 ['LF1', 'LF2'] 的行,所以它会返回我们不想要的这些:
1 2 ['LF1', 'LF2']
7 8 ['LF1', 'LF2', 'LF3', 'LF4', 'LF5']
【问题讨论】: