2017-11-30 6 views
0

私は日付を含むリストを持っています。それは以下のようになります。パンダのdfsをスライスする

[datetime.date(1994, 2, 4), 
    datetime.date(1994, 3, 22), 
    datetime.date(1994, 4, 18), 
    datetime.date(1994, 5, 17), 
    datetime.date(1994, 8, 16) 
    ...] 

とのように見えるパンダのDF:用

 1994-02-04 1994-03-22 1994-04-18 ... 
-2 
-1 
0 
1 
2 

値:私はのようになります。新しいDFを構築しようとしている

Date USD_I 
0 1971-01-04 100.0000 
1 1971-01-05 99.9700 
2 1971-01-06 99.9500 
3 1971-01-07 99.9400 
4 1971-01-08 99.9300 
5 1971-01-11 99.9100 
6 1971-01-12 99.8900 
7 1971-01-13 99.9000 
8 1971-01-14 99.8300 

and so on 

を行 '0'の列 '1994-02-04'は、最初のdf( 'USD_I'列)からのその日付の値でなければなりません。行 '-1'の値はその前日の値でなければならず、行 '1'の値は翌日の値などでなければなりません。単に列はリストの値であり、新しいdfの値は最初のdfのデータのスライスです。

私は2日目にこれをやろうとしていますが、まだインデックスを作成する際にエラーが発生し、オンラインで解決策を見つけることができませんでした。私は本当にどのような助けとそれに対処するヒントを感謝します。

for i in list: 
    result[i] = df[df['Date']==i]['USD_I'] 

最初は良いが、ある列名などの日付を私にデータフレームを与えた:私はそれをやろうとしている


(「結果は」最終DFの名前です)行は、最初の日付の値と他の人を持っているNaNのように私は、この行全体を削除してみてくださいされています

for i in result: 
    for x in range(-2,3): 
     result.loc[x,i] = df.loc[(df[df['Date']==i].index.values+x),'USD_I'] 

をしかし、これは私にValueErrorを与えた:シリーズとの互換性のないインデクサを

+0

エラーは何ですか?日を追加/減算するために 'datetime.timedelta'を使用していますか?出力データフレームに – Marmaduke

+0

がある場合、その値はどうなりますか?それはインデックスと列のようにしか見えません。 – MattR

+0

@Marmaduke私はポストと私がこれをやろうとしている方法で詳細を追加しました。 – Szymon

答えて

0

パンダのピボット方式(https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.pivot.html#pandas.DataFrame.pivot)を調べることをおすすめします。これにより、日付に列名を付けることができます。そこから、pd.timedelta(https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Timedelta.html)を使用して、現在の日付の前日または後日の日時を取得できます。この新しいdatetimeオブジェクトを使用して、データフレームに再索引付けし、適切な日を取得できます。

これはおそらくシフト方法を使用してこれを行う簡単な方法だと考えていますが、これはあなたが毎日の値を持ち、それらが順番にあることを前提としています。

+0

私は曜日やインデックス値を使用していても、最後のループのどこかで間違いを犯しています。私はループの最後の行をresult.loc [x、i] = df [df ['Date'] ==(i + dt.timedelta(days = x))] [[USD_I]]に変更しましたが、ValueErrorシリーズと互換性のないインデクサ私は何が間違っているのか知っていますか?私は完全にそれで失われています。 – Szymon

1

これで完了です。私はインデックス番号のリストを作成し、それはスムーズに行く。私は前にそれを試しましたが、私の間違いはlist.extendの代わりにlist.appendを使うことでした。ご協力ありがとうございました。

関連する問題