python - Pandas :水平扩展/分解数据框

标签 python python-3.x pandas dataframe pandas-groupby

这可能是重复的,但我找不到所需的答案。 那么,问题来了:

假设,我有这样一个数据框:

d1 = {'col1':  [[1],[2,3]],
      'col2' : [[3],[21,1]]}

df1 = pd.DataFrame(d1)
<表类="s-表"> <头> <日> col1 col2 <正文> 0 [1] [3] 1 [2, 3] [21, 1]

现在,我们可以通过 df1.apply(pd.Series.explode) 非常轻松地垂直扩展此数据框。 但是,在水平方向扩展并更改列名的最优雅方式是什么?

像这样:

d2 = {
    'col1_1':[1,2],
    'col1_2': [np.NAN,3],
    'col2_1' : [3,21],
    'col2_2' : [np.NAN,1]
}
df2 = pd.DataFrame(d2)

输出:

<表类="s-表"> <头> <日> col1_1 col1_2 col2_1 col2_2 <正文> 0 1 NaN 3 NaN 1 2 3.0 21 1.0

最佳答案

x = pd.concat(
    [df1[c].apply(pd.Series).add_prefix(c + "_") for c in df1], axis=1
)
print(x)

打印:

   col1_0  col1_1  col2_0  col2_1
0     1.0     NaN     3.0     NaN
1     2.0     3.0    21.0     1.0

如果你想要基于 1 的索引列:

x = pd.concat(
    [df1[c].apply(pd.Series).add_prefix(c + "_") for c in df1], axis=1
).rename(
    columns=lambda x: "{}_{}".format(x.split("_")[0], int(x.split("_")[1]) + 1)
)
print(x)

打印:

   col1_1  col1_2  col2_1  col2_2
0     1.0     NaN     3.0     NaN
1     2.0     3.0    21.0     1.0

关于python - Pandas :水平扩展/分解数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67442107/

相关文章:

python - 如何将 Pandas 数据框中的多列弹出到新的数据框中?

python - 是否有替代此代码看起来更整洁且更易于理解的代码?

javascript - django导入错误: No module named tiny-mce

python - 如何在for循环内生成热图?

python - Tensorflow 对象检测 API 裁剪图像片段

python - 如何将标题大写句子与介词匹配?

python - 获取 pandas 中分类变量的映射

python - 为什么 DBSCAN 聚类在电影镜头数据集上返回单个聚类?

Python 3.5.1 - 将变量分配给目标文件夹内的所有文件(文件类型 : . jpg)

python - 关于Python的内置类型是可迭代对象的问题