将DataFrame中的数组元素转换为新的行

碧海醫心
发布: 2025-11-02 12:11:01
原创
600人浏览过

将dataframe中的数组元素转换为新的行

本文介绍了如何将DataFrame中包含数组的列,通过提取数组元素的组合,转换为新的行。通过使用itertools.combinations生成元素对,并结合Pandas的explode和join操作,实现数据的重塑,最终将数组元素展开为新的列。

在数据处理中,经常会遇到DataFrame的某一列包含列表或数组的情况。有时,我们需要将这些数组中的元素展开,并将它们与其他列的数据进行组合,生成新的行。本教程将演示如何使用Python的pandas和itertools库来实现这一目标。

示例数据

首先,我们创建一个示例DataFrame,其中包含Group、A_x、A_y以及包含列表的B_m和B_n列。

import pandas as pd
from itertools import combinations

df = pd.DataFrame(
    data=[
        [0, 4, 9, [8, 7, 3], [-10, 5, 2]],
        [0, 1, 2, [8, 7, 3], [-10, 5, 2]],
        [1, 3, 3, [1, 2], [-5, 1]],
    ],
    columns=['Group', 'A_x', 'A_y', 'B_m', 'B_n'],
)
print(df)
登录后复制

输出:

   Group  A_x  A_y        B_m          B_n
0      0    4    9  [8, 7, 3]  [-10, 5, 2]
1      0    1    2  [8, 7, 3]  [-10, 5, 2]
2      1    3    3     [1, 2]      [-5, 1]
登录后复制

我们的目标是将B_m和B_n列中的列表元素两两组合,并生成新的列B_m1、B_n1、B_m2和B_n2,每个新行包含一个组合。

实现方法

以下是实现此目标的函数:

行者AI
行者AI

行者AI绘图创作,唤醒新的灵感,创造更多可能

行者AI100
查看详情 行者AI
def make_pairs(df: pd.DataFrame, col: str) -> pd.DataFrame:
    """
    将DataFrame中指定列的列表元素两两组合,生成新的DataFrame。

    Args:
        df: 输入DataFrame。
        col: 要处理的列名。

    Returns:
        包含组合元素的DataFrame。
    """
    pairs = (
        df[col]
        # Create 2-pair combinations of each list in the series 
        .apply(lambda x: [*combinations(iterable=x, r=2)])
        # Explode into a series of 2-item lists
        .explode()
    )
    # Construct a dataframe of the using the original index for joining
    return pd.DataFrame(
        data=pairs.to_list(),
        index=pairs.index,
        columns=[f"{col}{i}" for i in range(1, 3)]
    )
登录后复制

该函数首先使用itertools.combinations生成指定列中每个列表的元素对组合。然后,使用explode方法将这些组合展开为单独的行。最后,创建一个新的DataFrame,其中包含这些组合元素,并使用原始DataFrame的索引进行连接。

应用函数并生成结果

现在,我们可以应用该函数来处理B_m和B_n列,并将结果连接回原始DataFrame。

out = (
    df.join(
        other=[
            make_pairs(df=df, col="B_m"),
            make_pairs(df=df, col="B_n"),
        ],
    )
    # Drop the unneeded columns.
    .drop(columns=["B_m", "B_n"])
)
print(out)
登录后复制

输出:

   Group  A_x  A_y  B_m1  B_m2  B_n1  B_n2
0      0    4    9     8     7   -10     5
0      0    4    9     8     7   -10     2
0      0    4    9     8     7     5     2
0      0    4    9     8     3   -10     5
0      0    4    9     8     3   -10     2
0      0    4    9     8     3     5     2
0      0    4    9     7     3   -10     5
0      0    4    9     7     3   -10     2
0      0    4    9     7     3     5     2
1      0    1    2     8     7   -10     5
1      0    1    2     8     7   -10     2
1      0    1    2     8     7     5     2
1      0    1    2     8     3   -10     5
1      0    1    2     8     3   -10     2
1      0    1    2     8     3     5     2
1      0    1    2     7     3   -10     5
1      0    1    2     7     3   -10     2
1      0    1    2     7     3     5     2
2      1    3    3     1     2    -5     1
登录后复制

总结

本教程展示了如何使用itertools.combinations和Pandas的explode和join操作,将DataFrame中包含数组的列展开为新的行,并将数组元素两两组合。这种方法在数据处理和分析中非常有用,可以帮助我们更好地理解和利用数据。

以上就是将DataFrame中的数组元素转换为新的行的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号