我有一个数据帧,看起来是这样的:
index key set_col data
0 "a1" ("a", "b") "a1_data"
1 "a2" ("j", "k", "l", "m") "a2_data"
2 "b1" ("z", "y", "x", "w", "v", "u", "t") "b1_data"
如果集合的长度大于3个元素,我需要拆分set_col
,并将其添加到具有相同数据的重复行中,从而产生以下df:
index key set_col data
0 "a1" ("a", "b") "a1_data"
1 "a2" ("j", "k", "l") "a2_data"
2 "a2" ("m") "a2_data"
3 "b1" ("z", "y", "x") "b1_data"
4 "b1" ("w", "v", "u") "b1_data"
5 "b1" ("t") "b1_data"
我已经读过使用explode
、replace
或assign
的其他答案,比如this或this,但都没有处理将列表或集合拆分到一定长度并复制行的情况.
在this Answer上,我发现了以下代码:
def split(a, n):
k, m = divmod(len(a), n)
return (a[i*k+min(i, m):(i+1)*k+min(i+1, m)] for i in range(n))
我试着应用到这样的专栏中:
df['split_set_col'] = df['set_col'].apply(split(df['set_col'], 3))
但我明白一个错误:
pandas.errors.SpecificationError: nested renamer is not supported