
本文将介绍如何使用 Pandas 库将具有特定结构的数据框进行转换,把多行多列中符合条件的值提取并合并到单行中。该结构的数据框中,存在成对的位置和名称列,我们的目标是提取位置不为 -1 的名称,并将这些名称合并到一个新的数据框中,形成单行数据。本文将提供详细的代码示例和解释,帮助你理解并应用此方法。
在数据处理中,经常会遇到需要将分散在多行多列的数据合并成单行的情况。例如,当数据以键值对的形式存储在多个列中,而我们希望将这些键值对提取出来并形成一个更紧凑的数据结构时,就可以使用本文介绍的方法。
假设我们有如下的数据框 df (Table A):
Position A Name A Position B Name B Position C Name C Position D Name D Position E Name E0 -1 tortise -1 monkey 2 coca cola -1 slug -1 rooster1 3 sprite 2 coffee -1 bird -1 monkey -1 ostrich2 -1 nope -1 nope -1 fish 5 root beer 1 tea3 -1 nope -1 nope -1 nope -1 nope -1 nope
我们的目标是创建一个新的数据框 (Table B),其中包含 Name A 到 Name E 列,并且只包含 Position 列中对应值不等于 -1 的 Name 值。预期结果如下:
Name A Name B Name C Name D Name E0 sprite coffee coca cola root beer tea
以下是使用 Pandas 实现此转换的代码:
import pandas as pd# 示例数据框 (Table A)data = {'Position A': [-1, 3, -1, -1], 'Name A': ['tortise', 'sprite', 'nope', 'nope'], 'Position B': [-1, 2, -1, -1], 'Name B': ['monkey', 'coffee', 'nope', 'nope'], 'Position C': [2, -1, -1, -1], 'Name C': ['coca cola', 'bird', 'fish', 'nope'], 'Position D': [-1, -1, 5, -1], 'Name D': ['slug', 'monkey', 'root beer', 'nope'], 'Position E': [-1, -1, 1, -1], 'Name E': ['rooster', 'ostrich', 'tea', 'nope']}df = pd.DataFrame(data)# 核心代码new_df = (df.filter(like='Name').stack() .where(df.filter(like='Position').stack().ne(-1).values) .dropna().droplevel(0).sort_index().to_frame().T)print(new_df)
代码解释:
df.filter(like=’Name’): 使用 filter 函数选择所有列名包含 “Name” 的列,得到只包含 Name 列的数据框。.stack(): 使用 stack 函数将选择的 Name 列堆叠成一个 Series。这将把多个列合并成一个长列,方便后续处理。.where(df.filter(like=’Position’).stack().ne(-1).values): 这是关键的一步。首先,我们使用 df.filter(like=’Position’) 选择所有列名包含 “Position” 的列,然后使用 stack 函数将其堆叠成一个 Series。接着,使用 .ne(-1) 筛选出所有值不等于 -1 的位置。最后,使用 .where() 函数,根据位置信息,只保留 Name 列中对应位置不为 -1 的值,其他值会被替换为 NaN。.values 用来确保索引对齐。.dropna(): 使用 dropna 函数删除所有包含 NaN 值的行。这将删除所有位置为 -1 的 Name 值。.droplevel(0): 使用 droplevel(0) 函数删除堆叠操作创建的最外层索引,使得 Series 的索引更简洁。.sort_index(): 使用 sort_index() 函数对 Series 的索引进行排序,保证输出结果的顺序一致。.to_frame().T: 使用 to_frame() 函数将 Series 转换为 DataFrame,然后使用 .T 进行转置,将单列数据转换为单行数据,得到最终的结果。
注意事项:
确保 Position 和 Name 列的对应关系正确。代码依赖于它们在数据框中的相对位置。如果 Position 列中的无效值不是 -1,请相应地修改 .ne(-1) 中的值。此方法适用于具有类似结构的数据框,可以灵活地应用于其他数据清洗和转换任务。
总结:
本文提供了一种使用 Pandas 将具有特定结构的数据框进行转换的方法,可以将分散在多行多列中的符合条件的值提取并合并到单行中。通过使用 filter、stack、where、dropna 等函数,可以高效地完成数据转换任务。理解并掌握这些技巧,可以帮助你更好地处理和分析数据。
以上就是从多行和多列合并值为单行数据的教程的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1369868.html
微信扫一扫
支付宝扫一扫