如何使用Python pandas构造指定多行合并格式的DataFrame
实现方案
你需要的这种合并展示效果有两种常用实现方式,按需选择即可:
方式1:Details列存储为换行分隔的字符串(单条记录对应一个Name)
这种方式实际存储时每个Name仅对应1行数据,仅在打印/渲染时把Details内容拆成多行显示,和你的示例效果完全一致:
import pandas as pd # 构造原始数据,每个Name对应多条详情的列表 data = { "Name": ["Roan", "Marry", "Ruth"], "Details": [ ["Male", "Student", "Single"], ["Female", "Married"], ["Male"] ] } df = pd.DataFrame(data) # 将列表转为换行分隔的字符串 df["Details"] = df["Details"].str.join("\n") # 配置pandas显示规则,允许单元格内换行 pd.set_option('display.max_colwidth', None) pd.set_option('display.expand_frame_repr', False) print(df)
如果是在Jupyter Notebook环境中,无需打印,直接用以下代码即可自动渲染出换行效果:
df.style.set_properties(**{'white-space': 'pre-wrap'})
方式2:基于长表构造,打印时隐藏重复Name值
如果你的原始数据是每个Details对应一行的长表结构,可以用这种方式处理后打印:
import pandas as pd # 原始长表,每个Name对应多条Details记录 raw_data = [ ["Roan", "Male"], ["Roan", "Student"], ["Roan", "Single"], ["Marry", "Female"], ["Marry", "Married"], ["Ruth", "Male"] ] df_long = pd.DataFrame(raw_data, columns=["Name", "Details"]) # 把重复的Name值替换为空字符串,打印时就会呈现合并效果 df_print = df_long.copy() df_print["Name"] = df_print["Name"].mask(df_print["Name"].duplicated(), "") print(df_print)
内容的提问来源于stack exchange,提问作者Robab Malik
相关产品推荐
相关产品推荐

