将数组列切成最小大小

时间:2020-05-07 16:10:10

标签: python pandas dataframe

我有一个包含2列的DataFrame,其中包含ID列表。我想将ID切成最小尺寸。

          id_l       id_r                  id_l       id_r     
-------------------------        -------------------------
       [20,16]       [86]     >            [20]       [86]
          [18]   [12,642]     >            [18]       [12]
          [22]       [58]     >            [22]       [58]
      [1,2,26]     [5,60]     >           [1,2]     [5,60]
    [25,12,50] [13, 3,35]     >      [25,12,50] [13, 3,35]
           ...        ...                   ...        ...

例如,min( len([20,16]), len([86]) )1,它是列表的最大可能大小。 因此,需要对第一个列表进行切片以适应该情况,从而导致[20], [86]

我当前的解决方法是:

df.loc[:, "id_l"] = df.apply(lambda x: x['id_l'][:min(len(x['id_l']), len(x['id_r']))], axis=1)
df.loc[:, "id_r"] = df.apply(lambda x: x['id_r'][:min(len(x['id_l']), len(x['id_r']))], axis=1)

我还试图通过创建一个包含最小大小的新列并将其切成薄片来对其进行分解。

df.loc[:, "l_size"] = [len(x) for x in df["id_l"]]
df.loc[:, "r_size"] = [len(x) for x in df["id_r"]]
df.loc[:, "min_size"] = df[["l_size", "r_size"]].min(axis=1)

df.loc[:, "id_l"] = df.apply(lambda x: x['id_l'][:x['min_size']], axis=1)
df.loc[:, "id_r"] = df.apply(lambda x: x['id_r'][:x['min_size']], axis=1)

但是,这种方法实际上很慢,主要是df.apply函数。我想知道是否有更好的方法可以做到这一点。可能是向量化方法。

0 个答案:

没有答案
相关问题