Python pandas分组用于相关性分析

时间:2015-01-15 15:58:57

标签: python pandas correlation

假设两个数据帧,每个数据帧都有一个日期时间索引,每个数据帧都有一列未命名的数据。数据帧具有不同的长度,日期时间索引可能重叠也可能不重叠。

df1的长度为20. df2的长度为400.数据列由随机浮点数组成。

我想迭代遍历df2,每次迭代需要20个单位,每次迭代将起始向量增加一个单位 - 类似地,结束向量增加一个单位。在每次迭代中,我想计算20个df1单位和我为df2迭代选择的20个单位之间的相关性。然后将记录该相关系数和其他统计数据。

一旦循环完成,我想用df2的20单位向量绘制df1,以满足我的统计搜索 - 因此需要跟上一定程度的索引以在分析完成后重新获取向量。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在不知道问题的更多具体细节的情况下,例如,为什么这样做或日期很重要,这将按照您的要求进行。我很乐意根据您的反馈进行更新。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import random

df1 = pd.DataFrame({'a':[random.randint(0, 20) for x in range(20)]}, index = pd.date_range(start = '2013-01-01',periods = 20, freq = 'D'))
df2 = pd.DataFrame({'b':[random.randint(0, 20) for x in range(400)]}, index = pd.date_range(start = '2013-01-10',periods = 400, freq = 'D'))

corr = pd.DataFrame()
for i in range(0,380):

    t0 = df1.reset_index()['a'] # grab the numbers from df1
    t1 = df2.iloc[i:i+20].reset_index()['b'] # grab 20 days, incrementing by one each time
    t2 = df2.iloc[i:i+20].index[0] # set the index to be the first day of df2

    corr = corr.append(pd.DataFrame({'corr':t0.corr(t1)}, index = [t2])) #calculate the correlation and append it to the DF

# plot it and save the graph
corr.plot()
plt.title("Correlation Graph")
plt.ylabel("(%)")
plt.grid(True)
plt.show()
plt.savefig('corr.png')