我的数据就像:
Names Subsets Subnames SubNumber Numbers
AE,AI,AK OP,OP,DO ABC,ABC,ABC A-890,A891 9OP-A,98-OPB,8IC,87AC,58AP,7PL
AO,AI DO,AP KLM,ABC P890 L97, 52PL
IK,LJ,MI OP,OP,DO IJK,IJK,OPQ 90AKI 87AU, 90OP,89JN像这样的数据,
对于带有OP,OP,DO的子集,我需要以I结尾的名称编号。
就像。因为第一行有子集OP,OP,DO,而带有第一个索引的名称在末尾有字母I。因此,具有每个第一个索引98-OPB,58AP的数字是我需要的输出。(第一个索引意味着名称中有三个元素。因此,在第二个数字索引之后,第零指数再次开始)
Names Subsets Subnames SubNumber Numbers Output
AE,AI,AK OP,OP,DO ABC,ABC,ABC A-890,A891 9OP-A,98-OPB,8IC,87AC,58AP,7PL 98-OPB,58AP
AO,AI DO,AP KLM,ABC P890 L97, 52PL
IK,LJ,MI OP,OP,DO IJK,IJK,OPQ 90AKI 87AU, 90OP,89JN 89JN在第三行中,MI是第二个索引,因此这里需要具有第二个索引的数字89JN。
索引从零开始。
发布于 2022-05-25 04:10:35
这本质上是一个for循环,因为您正在处理object dtype。你也许可以做一些小的改进,但我真的不知道如何从我的头脑中获得任何巨大的收获--这是一个非常混乱的“提取”逻辑:
def extract(row):
names = row.Names.split(",")
numbers = row.Numbers.split(",")
idxs = {i for i, name in enumerate(names) if name[-1] == "I"}
return ",".join(num for i, num in enumerate(numbers) if i % len(names) in idxs)输出:
>>> df["Output"] = df[df["Subsets"] == "OP,OP,DO"].apply(extract, axis=1)
>>> df
Names Subsets Subnames SubNumber Numbers Output
0 AE,AI,AK OP,OP,DO ABC,ABC,ABC A-890,A891 9OP-A,98-OPB,8IC,87AC,58AP,7PL 98-OPB,58AP
1 AO,AI DO,AP KLM,ABC P890 L97,52PL NaN
2 IK,LJ,MI OP,OP,DO IJK,IJK,OPQ 90AKI 87AU,90OP,89JN 89JN如果你不想要NaN
df["Output"] = df["Output"].fillna("")https://stackoverflow.com/questions/72371739
复制相似问题