0

「溶かす」機能の助けが必要だと思います。

次のようなデータフレームがあります。

ここに画像の説明を入力

ご覧のとおり、現在のインデックスは時間です。

ただし、次のことを達成したい場合:

ここに画像の説明を入力

背後にある理論的根拠は、同じ四半期の異なる日の RZS 値を比較したいということです。

Melt 関数を使用できることはわかっていますが、この関数がどのように機能するのかわかりません...

from pandas import melt

df = pd.DataFrame(index=['00:00:00', '00:15:00'], columns=["2014-12-01","2014-12-02"])

データフレームを作成しますが、それを埋める方法がわかりません。私の質問:

  1. 1 日の 96 四半期すべてを含むインデックスを作成する最も簡単な方法は何ですか?
  2. Melt 関数を使用して新しい df を埋めるにはどうすればよいですか?

事前にどうもありがとうございました。

4

1 に答える 1

2

おそらく を探しているでしょう。pivot_tableこれは の逆のようなものですmelt。簡単にするために、次のコードは、時間の四半期を表す 96 個の整数値を含む「Uhrzeit」列で入力 DataFrame を再作成します。

import pandas as pd
import numpy as np

data = {
    'Datum': ['2014-12-01'] * 96 + ['2014-12-02'] * 96,
    'Uhrzeit': range(96) + range(96),
    'RZS': np.random.rand(96*2),
}

df = pd.DataFrame(data).set_index('Datum')[['Uhrzeit', 'RZS']]
df.reset_index(inplace=True) # Now this df looks like the input you described
df = pd.pivot_table(df, values='RZS', rows='Uhrzeit', cols='Datum')
print df[:10]

出力:

Datum    2014-12-01  2014-12-02
Uhrzeit                        
0          0.864674    0.363400
1          0.736678    0.925202
2          0.807088    0.076891
3          0.007031    0.528020
4          0.047997    0.216422
5          0.625339    0.636028
6          0.115018    0.141142
7          0.424289    0.101075
8          0.544412    0.147669
9          0.151214    0.274959

次に、目的の「Uhrzeit」を含む DataFrame を切り出すことができます。


編集:列RZSは文字列として表されているようです。これによりpivot_table、値列が数値であると予想されるため、問題が発生します。'1.087,29'strを float と見なす必要があると仮定して、その列を数値に変換するための簡単な修正を次に示します1087.29

df = pd.DataFrame({'RZS': ['1.087,29', '1.087.087,28', '1.087.087.087,28']})

def fix(x):
    return x.replace('.', '').replace(',', '.')

df['RZS'] = df['RZS'].apply(fix).astype(float)

# The column RZS now should be of dtype float, and pivot_table should work.
于 2015-01-06T07:45:56.653 に答える