我有两个pandas DataFrames的日常数据:
import pandas as pd
dates = pd.date_range('2016-01-01', '2018-01-01')
ndays = len(dates)
df1 = pd.DataFrame(np.random.rand(ndays, 3), columns=['a','b','c'], index=dates)
df2 = pd.DataFrame(np.random.rand(ndays, 3), columns=['a','b','c'], index=dates)
我想在非重叠的每月细分中采用每个数据框中的值的相关性。返回值应为按月索引的DataFrame,其中列为[' a'' b'' c'],其中每个值为每日的相关性该日历月的df1和df2值。
我可以在列和月份上执行此计算循环,但这听起来不像熊猫会怎么做。有没有办法根据日历月分割两个数据帧,在它们之间应用相关性,并组合成一个数据帧?
答案 0 :(得分:1)
这是一个有点混乱的单行:
pd.DataFrame.from_dict({col:pd.concat([df1[[col]],df2[[col]]],axis=1).groupby(pd.Grouper(freq='M')).apply(lambda x: x.corr().values[0,1]) for col in df1.columns})
基本上我为每列创建一个新的数据帧,每个月计算相关矩阵,然后采用非对角线(互相关)元素。可能有一种更漂亮的方法,但这似乎很快就会起作用。