首页 > 解决方案 > Python 3:通过解析 pandas 数据帧来构造变量

问题描述

我有以下数据框,其中包含id, start, end,列name

A   7   340 string1
B   12  113 string2
B   139 287 string3
B   301 348 string4
B   379 434 string5
C   41  73  string6
C   105 159 string7

我正在使用以下命令将其读入python3 pandas

import pandas
df = pandas.read_csv("table", comment="#", header=None, names=["id", "start", "end", "name"])

现在我需要为每个 , 解析和df提取,并将其解析为以下格式的列表:idstartendname

mylist = [GraphicFeature(start=XXX, end=YYY, color="#ffffff", label="ZZZ")]

XXX这里是startYYYendZZZ是“名字”。因此,该列表的项目数与每个 的行数一样多idGraphicFeature只是模块的成员名称。

我想过像这样循环数据框:

uniq_val = list(df["id"].unique())
for i in uniq_val:
    extracted = df.loc[df["id"] == i]

但是我该如何构建mylist呢?(构建列表后还会有一些其他的绘图命令)。

因此,我在循环中的预期“输出”是:

对于 id A

mylist = [GraphicFeature(start=7, end=340, color="#ffffff", label="string1")]

对于 id B

mylist = [GraphicFeature(start=12, end=113, color="#ffffff", label="string2"), GraphicFeature(start=139, end=287, color="#ffffff", label="string3"), GraphicFeature(start=301, end=348, color="#ffffff", label="string4"), GraphicFeature(start=379, end=434, color="#ffffff", label="string5")]

对于 id C

mylist = [GraphicFeature(start=41, end=73, color="#ffffff", label="string6"), GraphicFeature(start=105, end=159, color="#ffffff", label="string7")]

标签: pythonpandasdataframe

解决方案


使用 for 循环

l=[[GraphicFeature(start=x[0], end=x[1], color="#ffffff", label=x[2])for x in zip(y.start,y.end,y.name) ] for _,y in df.groupby('id')]

推荐阅读