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方法 (シミュレーションから取得したもの) がわかりません。

私の場合、対応するデータを1 列seriesと 1value列ではなく 16 の個別のテーブル列に書き込むようにシミュレーション コードを変更できますが、その 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)
4

1 に答える 1

1

より簡単にプロットできる DataFrame を取得する 1 つの方法を次に示します。

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 に答える