数据框架中的数据提取



我有这样的数据框架:

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的数字是我需要的输出。(每个第一个索引意味着Name中有三个元素。所以在第二个数字索引之后,还是从第0个索引开始)

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

从0开始索引。

这实际上是一个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("")

相关内容

  • 没有找到相关文章

最新更新