Expand pandas DataFrame column into multiple rows

前端 未结 7 1667
星月不相逢
星月不相逢 2020-12-05 04:50

If I have a DataFrame such that:

pd.DataFrame( {\"name\" : \"John\", 
               \"days\" : [[1, 3, 5, 7]]
              })
<
7条回答
  •  天涯浪人
    2020-12-05 05:44

    Here's something with NumPy -

    lens = [len(item) for item in df['days']]
    df_out = pd.DataFrame( {"name" : np.repeat(df['name'].values,lens), 
                   "days" : np.hstack(df['days'])
                  })
    

    As pointed in @unutbu's solution np.concatenate(df['days'].values) would be faster than np.hstack(df['days']).

    It uses a loop-comprehension to extract the lengths of each 'days' element, which must be minimal runtime-wise.

    Sample run -

    >>> df
               days  name
    0  [1, 3, 5, 7]  John
    1        [2, 4]  Eric
    >>> lens = [len(item) for item in df['days']]
    >>> pd.DataFrame( {"name" : np.repeat(df['name'].values,lens), 
    ...                "days" : np.hstack(df['days'])
    ...               })
       days  name
    0     1  John
    1     3  John
    2     5  John
    3     7  John
    4     2  Eric
    5     4  Eric
    

提交回复
热议问题