【问题标题】:Monthly correlations of daily data between two pandas DataFrames两个 pandas DataFrame 之间每日数据的月度相关性
【发布时间】:2018-11-04 22:18:57
【问题描述】:

我有两个日常数据的熊猫数据框:

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 中每日值的相关性。

我可以在列和月份上循环执行此计算,但这听起来不像熊猫会这样做。有没有办法根据日历月拆分两个数据帧,在它们之间应用相关性,然后组合成一个数据帧?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案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})
    

    基本上我为每一列创建一个新的数据框,每个月计算相关矩阵,然后取非对角线(互相关)元素。可能有一种更漂亮的方法可以做到这一点,但这似乎很快就奏效了。

    【讨论】:

    • 嗨,您有办法对同一数据集中的两列执行此操作吗?您的方式可行,但它用值替换所有列,而不是创建新列
    猜你喜欢
    • 2017-08-06
    • 2020-08-02
    • 2019-03-09
    • 2020-06-11
    • 2018-09-07
    • 1970-01-01
    • 2016-10-01
    • 2016-01-25
    • 1970-01-01
    相关资源
    最近更新 更多