1

我正在运行一个模拟,它为我提供了一个在结构上与以下 pandas 数据框相对应的 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→<code>df2 或df以任何其他方式从(这是我从模拟中得到的)获取绘图。

在我的情况下,我可以更改我的模拟代码以将相应的数据写入 16 个单独的表列而不是seriesvalue列,但是 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)
4

1 回答 1

1

这是获取 DataFrame 的一种方法,您可以在其中更轻松地进行绘图:

In [5]: df2 = DataFrame(dict(
                 (L, df[df['series'] == L]['value'].values)
                       for L in df['series'].unique()))

In [6]: df2
Out[6]: 
   A  B  C
0  0  0  5
1  1  0  4
2  2  1  3
3  3  2  2
4  4  4  1

如果将索引名称设置为'step',则可以根据需要进行绘图:

In [7]: df2.index.name = 'step'
Out[7]: 
      A  B  C
step         
0     0  0  5
1     1  0  4
2     2  1  3
3     3  2  2
4     4  4  1

In [8]: df2.plot()

这给出了所需的数字。

于 2012-11-30T14:47:52.803 回答