我有一个包含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
函数。我想知道是否有更好的方法可以做到这一点。可能是向量化方法。