python - 在python中创建短而窄的表,列中有列表
问题描述
我目前有一个要压缩的数据集。例如,假设一列是 ,另一列mother
是child
。母亲可能有不止一个孩子,但每个孩子只有一个母亲。所以在我的理想输出中,每个母亲会有一行,母亲是一列,孩子的列表是另一列。我当前的数据改为每个孩子一行,母亲重复。
根据这篇非常有用的博客文章,我可以在 R 中做到这一点。例如:
library(data.table)
dt <- data.table(mother = c("Penny", "Penny", "Anya", "Sam", "Sam", "Sam"),
child = c("Violet", "Prudence", "Erika", "Jake", "Wolf", "Red"))
dt[, children := .(list(unique(child))), by = mother]
dt[, child := NULL]
dt <- unique(dt, by = "mother")
我的输出如下所示:
mother children
1: Penny Violet,Prudence
2: Anya Erika
3: Sam Jake,Wolf,Red
但是,我正在使用 Python 和 pandas 一起工作,但我想不出等效的东西。我可以看到在 pandas 数据框单元格中可以有一个列表,但我不确定如何操作现有数据来生成它。也许 pandas 不是正确使用的东西,但它似乎是正确的。
这是我的数据框:
import pandas as pd
data = {'mother':["Penny", "Penny", "Anya", "Sam", "Sam", "Sam"],'child':["Violet", "Prudence", "Erika", "Jake", "Wolf", "Red"]}
df = pd.DataFrame(data)
抱歉,如果这是基本的 - 我是 Python 新手,在这里找不到答案。
解决方案
您可以使用作为分隔符GroupBy
的列mother
和聚合:join
','
df.groupby('mother').agg(','.join).reset_index()
mother child
0 Anya Erika
1 Penny Violet,Prudence
2 Sam Jake,Wolf,Red
对于列表而不是字符串,您可以执行以下操作:
df.groupby('mother').child.apply(list).reset_index()
mother child
0 Anya [Erika]
1 Penny [Violet, Prudence]
2 Sam [Jake, Wolf, Red]
推荐阅读
- python - “节点”对象不可调用
- javascript - 正则表达式验证主题标签 (#),忽略包含锚 (#) 的 URL
- xml - 如何绘制由 IAR Embedded Workbench 生成的 xml 调用图?
- json - Debezium Connector for PostgreSQL 在 JSON 类型的主题数据中引入 \
- c# - UWP Kiosk 模式在 F: 驱动器中打开 FileOpenPicker
- r - 提取公式括号内的信息
- java - 使用 ResponseEntity 获取 Http 响应
- c - 在 C 中的多维数组中添加行和列
- rabbitmq - Azure 服务总线、AWS SNS、RabbitMQ -> 所有订阅者都收到消息?
- java - 在新 IDE 中读取 JSON 文件失败