我有一个这样的数据框,
df
col1 col2
A [1]
B [1,2]
A [2,3,4]
C [1,2]
B [4]
现在我想根据 col2 列表中的值数量创建新行,其中 col1 值将相同,因此最终数据框看起来像,
df
col1 col2
A [1]
B [1]
B [2]
A [2]
A [3]
A [4]
C [1]
C [2]
B [4]
我正在寻找一些熊猫捷径以更有效地完成
答案 0 :(得分:1)
使用 DataFrame.explode
然后创建一个元素列表:
df2 = df.explode('col2')
df2['col2'] = df2['col2'].apply(lambda x: [x])
另一个想法,我希望在大数据中更快地使用 numpy np.repeat
和 chain.from_iterable
来展平值:
from itertools import chain
df2 = pd.DataFrame({
"col1": np.repeat(df.col1.to_numpy(), df.col2.str.len()),
"col2": [[x] for x in chain.from_iterable(df.col2)]})
print (df2)
col1 col2
0 A [1]
1 B [1]
2 B [2]
3 A [2]
4 A [3]
5 A [4]
6 C [1]
7 C [2]
8 B [4]