【问题标题】:Creating a DataFrame with Correlations for 2 variables in Pandas在 Pandas 中为 2 个变量创建具有相关性的 DataFrame
【发布时间】:2021-10-07 21:12:06
【问题描述】:

我目前有一个 pandas 数据框,我对其进行了很多操作,其中包含硬币的每日变化百分比和每日推特情绪的百分比变化。数据框如下所示:


+------------+-------------------+-----------------------+
|            | % Change in Price | % Change in Sentiment |
+------------+-------------------+-----------------------+
| 2019-01-31 |             12.4% |                   10% |
+------------+-------------------+-----------------------+
| 2019-02-01 |              115% |                   84% |
+------------+-------------------+-----------------------+
| 2019-02-02 |               62% |                   33% |
+------------+-------------------+-----------------------+
| 2019-02-03 |               14% |                  -15% |
+------------+-------------------+-----------------------+
| ...        | ...               | ...                   |
+------------+-------------------+-----------------------+
| 2021-06-29 | 12%               | 72%                   |
+------------+-------------------+-----------------------+
| 2021-06-30 | 18%               | 62%                   |
+------------+-------------------+-----------------------+

我要做的是创建一个新的数据框,计算价格变化百分比和情绪变化百分比两列之间的月度相关性,最终输出如下所示:

+------------+-------------+
|            | Correlation |
+------------+-------------+
| 2019-01-01 |         .43 |
+------------+-------------+
| 2019-02-01 |         .15 |
+------------+-------------+
| 2019-03-01 |         .09 |
+------------+-------------+
| 2019-04-01 |         .35 |
+------------+-------------+
| ...        | ...         |
+------------+-------------+
| 2021-05-01 | -.88        |
+------------+-------------+
| 2021-06-01 | -.12        |
+------------+-------------+

感谢您对此的任何支持!

【问题讨论】:

    标签: pandas dataframe time-series pandas-groupby correlation


    【解决方案1】:

    假设你想要Pearson Correlation Coefficient:

    df.groupby(pd.Grouper(freq='M')).corr().iloc[0::2,-1].droplevel(1)

    说明

    df.groupby(pd.Grouper(freq='M')) → 按月分组

    .corr() → 应用 PCC(默认情况下,其他可用)以获得每个月的 2x2 矩阵

    到目前为止很容易。接下来的两个步骤是繁琐/丑陋的部分:

    .iloc[0::2,-1] → 拉出每个矩阵的第一个元素(这是每个矩阵中唯一有趣的变量)

    .droplevel(1) → 我们得到了一个不需要的多索引,所以删除第二部分

    也许没有最后两个步骤,有一种更清洁的方法......

    【讨论】:

    • 感谢您将其分解。当我尝试实施时,我收到一个错误“TypeError:仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但有一个 'Int64Index' 的实例”我已将“new_date”列从字符串转换为日期/时间并设置它作为索引,但这似乎并不能解决错误。有什么想法吗?
    • 不客气。好吧,听起来您的索引不是 DatetimeIndex,而是 Int 索引。 :-) 你能检查索引的类型吗? df.index 应该足够了。也许您错误地将其设置为 Unix 时间。我认为pd.to_datetime(series) 应该返回正确的类型。
    • 嗨@J.Smith,如果您觉得我的回答有帮助,如果您将其标记为已接受的答案,我将不胜感激:-)
    猜你喜欢
    • 2014-02-09
    • 2017-10-08
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    相关资源
    最近更新 更多