将包含元组的数据帧列转换为行

2024-04-18 22:35:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似以下的数据帧:

   A         B       C    D          E        F
0  1  (10, 11)  (a, b)  abc         ()       ()
1  2  (10, 11)  (a, b)  def    (2, 19)   (j, k)
2  3        ()      ()  abc     (73,)      (u,)

其中某些列包含元组。如何为元组中的每个项创建一个新行,使结果看起来像这样?你知道吗

   A         D      B       C       E       F
0  1        abc     10      a       
1                   11      b
2  2        def     10      a       2       j
3                   11      b       19      k
4  3        abc                     73      u

我知道B列和C列的元素数始终相同,E列和F列的元素数也一样


Tags: 数据元素def元组abc
1条回答
网友
1楼 · 发布于 2024-04-18 22:35:43

使用zip_longest from itertools。所有单个值都包装在列表中,以便可以与其他列表(或元组)一起压缩

expanded = df.apply(
    lambda x: pd.DataFrame.from_records(zip_longest([x.A], x.B, x.C, [x.D], x.E, x.F), 
                                        columns=list('ABCDEF')), 
    axis=1
).values

这将创建一个数据帧数组,然后将其串联起来以获得所需的结果。最后,应该重置索引以匹配预期输出。你知道吗

df_expanded = pd.concat(expanded).reset_index(drop=True).
# df_expanded outputs:
     A     B     C     D     E     F
0  1.0    10     a   abc  None  None
1  NaN    11     b  None  None  None
2  2.0    10     a   def     2     j
3  NaN    11     b  None    19     k
4  3.0  None  None   abc    73     u

相关问题 更多 >