【发布时间】:2012-11-18 19:00:40
【问题描述】:
我正在运行一个模拟,它为我提供了一个在结构上与以下熊猫数据框相对应的 csv 文件:
df = DataFrame({'series': {0: 'A', 1: 'B', 2: 'C', 3: 'A', 4: 'B', 5: 'C', 6: 'A', 7: 'B', 8: 'C', 9: 'A', 10: 'B', 11: 'C', 12: 'A', 13: 'B', 14: 'C'}, 'step': {0: '0', 1: '0', 2: '0', 3: '1', 4: '1', 5: '1', 6: '2', 7: '2', 8: '2', 9: '3', 10: '3', 11: '3', 12: '4', 13: '4', 14: '4'}, 'value': {0: '0', 1: '0', 2: '5', 3: '1', 4: '0', 5: '4', 6: '2', 7: '1', 8: '3', 9: '3', 10: '2', 11: '2', 12: '4', 13: '4', 14: '1'}})
step value series
0 0 0 A
1 0 0 B
2 0 5 C
3 1 1 A
4 1 0 B
5 1 4 C
6 2 2 A
7 2 1 B
8 2 3 C
9 3 3 A
10 3 2 B
11 3 2 C
12 4 4 A
13 4 4 B
14 4 1 C
鉴于此 df,我如何绘制每个系列的 (step, value) 对?
也就是说,我要获取图片
这很容易获得(只要df2.plot("step")我可以将我的DataFrame格式转换为df2
A B C step
0 0 0 5 0
1 1 0 4 1
2 2 1 3 2
3 3 2 2 3
4 4 4 1 4
但我不知道如何进行转换df→df2 或以任何其他方式从df(这是我从模拟中得到的)获取绘图。
在我的情况下,我可以更改我的模拟代码以将相应的数据写入 16 个单独的表列,而不是一个 series 和一个 value 列,但是 16 是大多数模拟的值,有些不是全部这些系列,将来我可能需要进一步拆分,所以这对我来说不是最好的解决方案。
为了生成两个示例数据帧,我朝另一个方向做了
df2 = pandas.DataFrame({"step":xrange(5),"A":xrange(5),"B":[i*(i+1)/5 for i in xrange(5)],"C":xrange(5,0,-1)})
dfA = df2[["step","A"]].rename(columns={"A":"value"})
dfA["series"] = "A"
dfB = df2[["step","B"]].rename(columns={"B":"value"})
dfB["series"] ="B"
dfC = df2[["step","C"]].rename(columns={"C":"value"})
dfC["series"] ="C"
df = dfA.append(dfB).append(dfC).sort("step")
df.index = xrange(15)
【问题讨论】:
-
看起来你在管理 csv 文件时遇到了麻烦,而且本身没有绘图,对吗?假设您将 csv 命名为“a1.csv”,
d = {}; [d[item[0][0]].append(item[0][1]) if item[0][0] in d else d.update([ (item[0][0], [item[0][1]])]) for item in [ map(lambda x: (x[3], [int(x[1]), int(x[2])]), [line.split()]) for line in open('a1.csv').readlines()[1:]]]; print d中的d是否包含您想要的内容?
标签: python matplotlib pandas