以下の様に、消費カロリーが翌日の体重の変化と関係する場合、  
相関の計算時は、同一時刻ではなく、  
別々の時刻となるかと思うのですが、  
どの様にDataframeを定義すればいいのでしょうか？？  
（dataframeを定義し、df.corrで相関を計算する想定）

通常だと、pd.dataframe(table[['消費カロリー,'体重']])みたいに定義し、  
df.corrで出ると思うのですが、当日の消費カロリー、翌日の体重の場合の表現方法が分かりません。。

2000-01-01の消費カロリー、2000-01-02の体重  
2000-01-02の消費カロリー、2000-01-04の体重  
・  
・

* * *
```

    　　　　　　　消費カロリー　 体重
    2000-01-01   300kcal       60kg
    2000-01-02   400kcal       59.9kg
    2000-01-04   800kcal       59.8kg
    2000-01-05   100kcal       59.6kg 
    2000-01-07   200kcal       59.6kg
    
```
CC BY-SA 4.0
2019-06-23T11:48:18.680
56035
2020-09-14T00:06:30.810
2019-06-24T21:59:54.487
19110
31764
question
python python3 pandas
pandasで1つ前の日付との相関をとるには
おそらくこの記事が該当すると思われます。  
[How to Offset Pandas Pearson Correlation with Datetime
Index](https://stackoverflow.com/q/43544563/9014308)  
質問:

> I'm trying to get a correlation value for a previous week's inputs to the
> following week's output.  
>  For the sake of this example I've set it up where each week's input will be
> the following week's Output, and the `df.corr()` should give a `1.000000`
> result.
>
> 先週の入力と翌週の出力の相関値を取得しようとしています。  
>  この例のために、私は各週の入力が翌週の出力になるように設定しました、そして`df.corr()`は`1.000000`の結果を与えるべきです。
>
> And as a newbie here's where I'm stuck. I don't see a `shift` option built
> in the function and not sure how to do this.
>
> そして初心者としてここに私は立ち往生しているところです。 私は関数に
> `shift`オプションが組み込まれているのを見ていないしこれをどうやってやるかわからない。

回答:

> If you do `.corr` on a dataframe, it will produce a correlation matrix.  
>  In your case, you just want the correlation between two time series and you
> can achieve this with the code below. Note that the `.corr` method for a
> time series requires the parameter `other`, which is the series to compute
> the correlation with.
>
> データフレームに対して`.corr`を実行すると、相関行列が生成されます。  
>  あなたのケースでは、2つの時系列間の相関関係が欲しいだけなので、以下のコードでこれを達成できます。
> 時系列の`.corr`メソッドでは、相関を計算するための系列であるパラメータ`other`を必要とすることに注意してください。
```

>     df["Input"].corr(df["Output"].shift(-1), method = 'pearson', min_periods
> = 1) #1
>  
```

>
> If instead you want the correlation matrix, you should first create a
> dataframe with shifted Output and then compute the correlation:
>
> 代わりに相関行列が必要な場合は、まずシフトされた出力を持つデータフレームを作成してから相関を計算する必要があります。
```

>     temp_df = pd.concat([df['Input'], df['Output'].shift(-1)], axis =
> 1).dropna()
>     temp_df.corr(method = 'pearson', min_periods = 1)
>  
>     #        Input  Output
>     #Input     1.0     1.0
>     #Output    1.0     1.0
>  
```

上記引用の最後を当てはめると、以下のようになるのでは？  
ただし、上記記事が2年前のものなので、細かいところが今も同じかどうかは不明です。  
**試してみてください。**

```

    temp_df = pd.concat([df['消費カロリー'], df['体重'].shift(-1)], axis=1).dropna()
    temp_df.corr(method='pearson', min_periods=1)
    
```
CC BY-SA 4.0
2019-06-24T12:15:29.150
56068
2019-06-24T12:15:29.150
26370
56035
answer