我已经将与某个值相关联的ids列表组合在一起,并将所有这些ids列表放到一个dataframe中。如下所示:(使用index = id)
phase list_ids
id
a1 1 [a1,a2,c3]
a2 3 [a1,b2,c3]
b1 3 [a2,b2]
b2 2 [b1,b2,c1]
b3 3 [b2,c1]
c1 1 [a1,a2,c3]
c2 1 [a1,b1,c4]
c3 2 [c1,c2,c4]
c4 1 [c1,c2]我想迭代这些列表,并将它们交叉引用到id索引,其中位相等于2或3,然后将与原始列表匹配的id保持在原来的列表中(或者如果不可能,使用修改后的列表创建一个新列)。如下所示:
phase list_ids
id
a1 1 [a2,c3] #ids whose phase != 2|3 not kept in list
a2 3 [b2,c3]
b1 3 [a2,b2]
b2 2 [b1,b2]
b3 3 [b2]
c1 1 [a2,c3]
c2 1 [b1]
c3 2 []
c4 1 []如果可能的话,我希望在dataframe对象中这样做,因为每一行都有多个特性/依赖项。关于这件事有什么建议吗?
我的实际数据:
phase ids
Study_id
ACP-103-006 2.0 [ACP-103-006, ACP-103-020, ACP-103-019, ACP-10...
ACP-103-008 2.0 [ACP-103-006, ACP-103-020, ACP-103-019, ACP-10...
ACP-103-010 2.0 [ACP-103-042, ACP-103-034, ACP-103-014, ACP-10...
ACP-103-012 3.0 [ACP-103-042, ACP-103-034, ACP-103-014, ACP-10...
ACP-103-014 3.0 [ACP-103-042, ACP-103-034, ACP-103-014, ACP-10... 而D型:
phase float64
ids object
dtype: object 和good_ids输出:
print(good_ids)
{'CLS1001-301', 'EFC13799', 'AG120-C-009', 'IRBES_R_04320', 'LTS11298', 'CLS1003-302', '13621', 'TMC-ORI-10-01', '11935', 'C_8428', 'ACP-103-008', 'SFY13476', 'MNTX 301EXT', '14-OBE001-016', '812P310', 'V01-126A-201', 'VX06-770-101', 'EFC11603', ...}发布于 2018-04-17 18:41:48
假设列list_ids中的每个元素都是字符串列表,则可以执行以下操作:
首先获得“好”set的ids (其中阶段为2或3):
good_ids = set(df[df["phase"].isin([2,3])].index)
print(good_ids)
#{'a2', 'b1', 'b2', 'b3', 'c3'}接下来,使用apply来使用good_ids过滤list_ids
df["list_ids"] = df["list_ids"].apply(lambda x: [val for val in x if val in good_ids])
print(df)
# phase list_ids
#id
#a1 1 [a2, c3]
#a2 3 [b2, c3]
#b1 3 [a2, b2]
#b2 2 [b1, b2]
#b3 3 [b2]
#c1 1 [a2, c3]
#c2 1 [b1]
#c3 2 []
#c4 1 []https://stackoverflow.com/questions/49885060
复制相似问题