python - 将列表的列分解为多行

标签 python list pandas dataframe

我想将某一列(示例中的 column_x)中的列表扩展到多行。

所以

df = pd.DataFrame({'column_a': ['a_1', 'a_2'], 
                   'column_b': ['b_1', 'b_2'], 
                   'column_x': [['c_1', 'c_2'], ['d_1', 'd_2']]
                  })

应从

转化
    column_a    column_b    column_x
0   a_1         b_1         [c_1, c_2]
1   a_2         b_2         [d_1, d_2]

    column_a    column_b    column_x
0   a_1         b_1         c_1
1   a_1         b_1         c_2
2   a_2         b_2         d_1
3   a_2         b_2         d_2

到目前为止,我的代码正是这样做的,它确实做到了 fast .

lens = [len(item) for item in df['column_x']]
pd.DataFrame( {"column_a" : np.repeat(df['column_a'].values, lens), 
               "column_b" : np.repeat(df['column_b'].values, lens), 
               "column_x" : np.concatenate(df['column_x'].values)})

但是,我有很多专栏。是否有一种简洁优雅的解决方案来重复整个数据框而无需再次指定每一列?

最佳答案

Pandas >= 0.25

Pandas 可以通过 df.explode 在单个函数调用中完成此操作.

df.explode('column_x')

  column_a column_b column_x
0      a_1      b_1      c_1
0      a_1      b_1      c_2
1      a_2      b_2      d_1
1      a_2      b_2      d_2

请注意,您只能在一列上展开 Series/DataFrame。


Pandas < 0.25

column_x 沿第 0 轴调用 np.repeat

df1 = pd.DataFrame(
    df.drop('column_x', 1).values.repeat(df['column_x'].str.len(), axis=0),
    columns=df.columns.difference(['column_x'])
)
df1['column_x'] = np.concatenate(df['column_x'].values)

df1

  column_a column_b column_x
0      a_1      b_1      c_1
1      a_1      b_1      c_2
2      a_2      b_2      d_1
3      a_2      b_2      d_2

关于python - 将列表的列分解为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49147996/

相关文章:

python - 使用 Python 设置和压缩问题

python - Kivy 未检测到目录中的文件

python - 将列表的最后一个元素移动到列表的第一个元素

python - 如何解决 AttributeError : 'DataFrame' object has no attribute

python - 仅监听 python 中的 cloud firestore 集合的添加内容

python - row_to_json 和 psycopg2.fetchall() 结果是列表中的列表而不是列表中的字典

python - 在 Python timedelta 对象上重新采样 Pandas 时间序列数据时出现问题

python - 如何使用冒号分隔符从 csv 创建数据框

list - 使用 Prolog 读取记录列表并执行有关先前记录的持续计算

c# - 如何将 ienumerable 集合附加到 C# 中的现有列表