为 Pandas 中的 2 个变量创建具有相关性的 DataFrame
Creating a DataFrame with Correlations for 2 variables in Pandas
我目前有一个 pandas 数据框,我对其进行了大量操作,其中包含硬币的每日变化百分比和 Twitter 情绪的每日变化百分比。数据框如下所示:
+------------+-------------------+-----------------------+
| | % 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 |
+------------+-------------+
感谢您对此的支持!
假设您想要 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)
→ 我们剩下一个不需要的多索引,所以删除第二部分
也许有一个稍微干净的方法,没有最后两个步骤...
我目前有一个 pandas 数据框,我对其进行了大量操作,其中包含硬币的每日变化百分比和 Twitter 情绪的每日变化百分比。数据框如下所示:
+------------+-------------------+-----------------------+
| | % 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 |
+------------+-------------+
感谢您对此的支持!
假设您想要 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)
→ 我们剩下一个不需要的多索引,所以删除第二部分
也许有一个稍微干净的方法,没有最后两个步骤...