gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:56:57 25 4
gpt4 key购买 nike

我想将某一列(示例中的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com