我有一个100196行x8列的数据帧.

ID  data 1  data 2

我希望得到类似如下所示的输出

enter image description here

列2到列5具有相同的数据,因为ID相同.我只想有所有的设计代码在一个单元格作为新行.我知道我们可以使用GROUPBY和AGG函数,但我只能添加一列.

有谁能建议一下,如何解决这个问题?

推荐答案

我已经根据您的示例创建了一个模拟数据集:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "ID": ["1", "1", "2", "3", "3", "3"],
    "Data 1": ["data11", "data11", "data12", "data13", "data13", "data13"],
    "Data 2": ["data21", "data21", "data22", "data23", "data23", "data23"],
    "Design Code": ["a", "b", "c", "d", "e", "f"]
})

您可以对GROUPBY中的不同列应用不同的聚合,以获得预期的结果,例如:

df \
    .groupby("ID", as_index=False) \
    .agg({
        "Data 1": min,
        "Data 2": min,
        "Design Code": lambda x: "\n".join(np.unique(x)),
    })

输出:

         ID Data 1  Data 2  Design Code
0        1  data11  data21  a\nb
1        2  data12  data22  c
2        3  data13  data23  d\ne\nf

至于Design Code带换行符的显示,如果你使用的是Jupyter笔记本,你可以参考https://stackoverflow.com/a/46326725/22052558.

Python-3.x相关问答推荐

类型注释:pathlib. Path vs importlib. resources. abc. Traversable

为什么打印语句在Python多处理脚本中执行两次?

Pandas :从元组字典创建数据帧

如何在 python 中将带有时区信息的时间戳转换为 utc 时间

以某种方式分割字符串

如何使用Selenium从网站下拉菜单中获取值列表?

在Pandas中,根据另一列中的重复值将数据分组为一列

如何在 histplot 中标记核密度估计

如何使用 Selenium 和 Python 作为线程来使用事件(Chrome-Developer-Tools)?

在 python pandas 中设置条件和分配新值

位对的距离

Python多进程:运行一个类的多个实例,将所有子进程保留在内存中

协议不支持地址系列在将 Scapy L3socket 与 WSL 一起使用时

如何使用 Selenium by class_name 从大学橄榄球数据中抓取图像 url 列表

如何调试垂死的 Jupyter Python3 内核?

python 内置的 __exit__ 参数类型是什么?

Python 3.5:async with导致 SyntaxError.为什么?

变量类型注解NameError不一致

对字节进行按位运算

Python 2 与 Python 3 - urllib 格式