[英]Matplotlib plotting different lines from one column in Dataframe
[英]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
但我看不到如何进行df
→ df2
转换或以其他任何方式从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.