繁体   English   中英

从熊猫数据框中绘制数据线,由一列中的键而不是由不同列标识

[英]Plotting data lines from pandas dataframe, identified by keys in one column instead by different columns

我正在运行一个仿真,该仿真为我提供了一个结构对应于以下熊猫数据框的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)对?

也就是说,我想得到图像

在此处输入图片说明

如果我可以将DataFrame设置为df2格式,则很容易获得(只需df2.plot("step")

   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

但我看不到如何进行dfdf2转换或以其他任何方式从df获得绘图(这是我从模拟中获得的结果)。

我可以更改模拟代码,以在我的情况下将相应的数据写入16个单独的表列,而不是一个series和一个value列,但是那16个值是大多数模拟的值,某些情况下不会使用所有这些序列,并且在将来可能需要进一步拆分,所以这似乎不是我的最佳解决方案。


为了生成两个示例DataFrame,我朝另一个方向去做

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)

这是一种获取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()

给出所需的数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM