如何将Pandas DataFrame中数组类型行拆分为多行?
使用pd.DataFrame.explode()拆分DataFrame数组列为多行
我有一个pandas DataFrame结构,其中部分列的条目为数组类型,希望将这些数组条目拆分为长格式的多行。
可复现代码
import pandas as pd import numpy as np date = '08-30-2022' ids = ['s1', 's2'] g1 = ['b1', 'b2'] g2 = ['b1', 'b3', 'b4'] g_ls = [g1, g2] v1 = [2.0, 2.5] v2 = [3.2, np.nan, 3.7] v_ls = [v1, v2] dict = { 'date': [date] * len(ids), 'ids': ids, 'group': g_ls, 'values': v_ls } df_in = pd.DataFrame.from_dict(dict) dict_out = { 'date': [date] * 5, 'ids': ['s1', 's1', 's2', 's2', 's2'], 'group': ['b1', 'b2', 'b1', 'b3', 'b4'], 'values': [2.0, 2.5, 3.2, np.nan, 3.7] } desired_df = pd.DataFrame.from_dict(dict_out)
当前DataFrame样式
date ids group values 0 08-30-2022 s1 [b1, b2] [2.0, 2.5] 1 08-30-2022 s2 [b1, b3, b4] [3.2, nan, 3.7]
期望得到的DataFrame样式
date ids group values 0 08-30-2022 s1 b1 2.0 1 08-30-2022 s1 b2 2.5 2 08-30-2022 s2 b1 3.2 3 08-30-2022 s2 b3 NaN 4 08-30-2022 s2 b4 3.7
解决方案
直接使用pd.DataFrame.explode()方法,同时指定需要拆分的多个列(确保每个列的数组长度一一对应),即可将数组列拆分为多行:
result_df = df_in.explode(['group', 'values'], ignore_index=True)
执行后得到的result_df与desired_df完全一致。
内容的提问来源于stack exchange,提问作者ktj1989
相关产品推荐
相关产品推荐

