3

キーボードに頭をぶつけすぎている時間帯です。アドバイスをいただければ幸いです。私の全体的な目標は、ギャップのある時間ごとの気温のデータファイルを取り込むことです。近くのサイトからの温度を使用した線形回帰を使用して、これらのギャップを埋めたいと考えています。しかし、私はこれを BY YEAR と BY MONTH でやりたいと思っています。ここにいる人々の助けを借りて、私はこれの多くを行うことができました. 今、私は線形回帰関数をBY YEAR AND MONTHのように適用しました

Corr_grouped=DF_grouped.apply(lambda x: stats.linregress(x [Labels[0]], x [Labels[3]]))

これにより、勾配、切片、r_value、p_value、std_err の出力があり、このように表示される次のものが生成されました。

> 2010  1     (0.806190897504, 5.75672188581, 0.901179913935...
>       2     (0.739906365408, 8.05204746237, 0.894050112908...
>       3     (0.773199101365, 6.88505178697, 0.898475211997... ...
>       10    (0.87497855294, 4.10227036556, 0.939948762031,...
>       11    (0.793072407801, 6.38604194806, 0.923659962858...

私は一日中、見つけられない正確な解決策を読んでいます。ここで私の質問は、これを元のデータ フレームに適用する方法です。入力として列 3 を使用して元のデータの各行に線形回帰 y=mx+c を適用する DF の新しい列が必要ですが、異なる特定の係数 (勾配、切片) を使用してそれを行います。年と月ごとに。どんなアイデアでも大歓迎です:)乾杯ジェイソン

編集:素晴らしい。DFはこんな感じ。複数年の 30 分ごとのタイムスタンプがあります。1 つまたは複数の間隔のギャップ (NaN) があります。近くの駅 (T_nearby) との関係を使用して、元の列 (T_original) のギャップを埋める必要があります。しかし、それは単純な代用ではありません。多くの場合、サイトはある程度離れており、温度は相関していますが、同じではありません (つまり、一方が 2℃高い場合があります)。SO T_nearby ステーションを最初に調整してから、ギャップを埋めるために使用する必要があります。

                        T_original  T_nearby
2010-01-01 00:00:00  25.87873       25.4
2010-01-01 00:30:00  25.73089       25.4
2010-01-01 01:00:00  25.56144       25.4
2010-01-01 01:30:00  NaN         25.4
2010-01-01 02:00:00  25.24789       25.6
2010-01-01 02:30:00  25.17758       25.4
2010-01-01 03:00:00  NaN         25.6
2010-01-01 03:30:00  NaN         25.6
2010-01-01 04:00:00  25.07633       25.6
2010-01-01 04:30:00  24.99211       25.5

YEAR と MONTH で分析を分類したいと思います。したがって、各年の各月について、T_original と T_nearby の間の線形回帰適合を計算します。これにより、線形回帰パラメータを持つグループ化されたオブジェクトが得られます。たとえば、2010 年と 1 月の切片は 5.75 で、勾配は 0.806 です。

そこで、この関係を Year=2010 と Month=1 のすべてに適用して、次のようにしたいと思います。次に、DF の残りの部分について、各年の各月に同じアプローチを適用します。

    T_original      T_nearby    T_adjusted
1/01/2010 0:00  25.87873    25.4    26.2224
1/01/2010 0:30  25.73089    25.4    26.2224
1/01/2010 1:00  25.56144    25.4    26.2224
1/01/2010 1:30  NaN             25.4    26.2224
1/01/2010 2:00  25.24789    25.6    26.3836
1/01/2010 2:30  25.17758    25.4    26.2224
1/01/2010 3:00  NaN             25.6    26.3836
1/01/2010 3:30  NaN             25.6    26.3836
1/01/2010 4:00  25.07633    25.6    26.3836
1/01/2010 4:30  24.99211    25.5    26.303

次に、T_adjusted 列を使用して、T_original のギャップを埋めます。ありがとうジェイソン

4

1 に答える 1

1

最初のステップは、グループ化されたオブジェクトを DF とマージすることです。これを行うには、最初に共通のグループ化列を作成します。

グループ化されたオブジェクトの場合:

from datetime import date
grouped['common'] = grouped.index.map(lambda x : date(x[0],x[1],1))

DF の場合:

DF['common'] = DF.index.map(lambda x : date(x.year,x.month,1))

これでマージできます:

merged = DF.merge(grouped)
del merged['common']

T_adjusted 列を計算するための正確な式が何であるかはわかりませんが、回帰パラメータが T_nearby 値と一致するようになったので、配列操作で計算できます。

T_adjusted を使用して T_original のギャップを埋めるには:

merged['T_original']=merged['T_original'].combine_first(merged['T_adjusted'])
于 2013-02-26T09:14:14.303 に答える