pandas - 从 CSV 文件可视化财务数据
问题描述
我受到与我类似问题的上一篇文章的启发。我有一个 DataFrame,我想绘制一个带有 5 个不同图例的图表。但是,输出只有 1 个输出,与上一篇文章不同 - Pandas dataframe groupby plot
我可以知道是什么问题吗?
我的数据框是这样的:-
import pandas as pd
import import matplotlib.pyplot as plt
df1 = pd.read_csv('df_ratio_mac.csv')
df1
date symbol roe roa
0 2019-12-31 FMC 21.2189 5.5051
1 2018-12-31 FMC 16.7456 5.3899
2 2017-12-31 FMC -4.9167 -1.4457
3 2016-12-31 FMC 6.5580 2.1289
4 2015-12-31 FMC -11.1408 -3.3608
15 2019-12-31 VMC 21.2189 5.5051
16 2018-12-31 VMC 16.7456 5.3899
17 2017-12-31 VMC -4.9167 -1.4457
18 2016-12-31 VMC 6.5580 2.1289
19 2015-12-31 VMC -11.1408 -3.3608
30 2019-12-31 APD 21.2189 5.5051
31 2018-12-31 APD 16.7456 5.3899
32 2017-12-31 APD -4.9167 -1.4457
33 2016-12-31 APD 6.5580 2.1289
34 2015-12-31 APD -11.1408 -3.3608
45 2019-12-31 MLM 21.2189 5.5051
46 2018-12-31 MLM 16.7456 5.3899
47 2017-12-31 MLM -4.9167 -1.4457
48 2016-12-31 MLM 6.5580 2.1289
49 2015-12-31 MLM -11.1408 -3.3608
fig, ax = plt.subplots(figsize=(20,4))
for key, grp in df1.groupby(['symbol']):
ax.plot(grp['date'], grp['roe'], label=key)
ax.legend()
plt.show()
我的输出:
解决方案
为了绘制这样的东西,我通常更喜欢循环遍历数据框,而不是尝试将事物放入 group-by 或其他内容中。
例如(您的数据已经是长格式,因为这种方法更容易):
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(3, 3))
for s in df["symbol"].unique():
dp = df[df["symbol"] == s].copy()
x = dp["date"]
y = dp["roe"]
ax.plot(x, y)
会给你:
(注意 - 我创建了新数据以便可以看到线条)
使用的数据:
date symbol roe roa
0 2019-12-31 FMC 1.763938 5.5051
1 2018-12-31 FMC -11.131745 5.3899
2 2017-12-31 FMC -4.476314 -1.4457
3 2016-12-31 FMC -7.981688 2.1289
4 2015-12-31 FMC -14.543511 -3.3608
15 2019-12-31 VMC 3.866193 5.5051
16 2018-12-31 VMC 1.195928 5.3899
17 2017-12-31 VMC 12.469453 -1.4457
18 2016-12-31 VMC 4.784923 2.1289
19 2015-12-31 VMC 13.161288 -3.3608
30 2019-12-31 APD 1.288219 5.5051
31 2018-12-31 APD 3.476883 5.3899
32 2017-12-31 APD -1.568422 -1.4457
33 2016-12-31 APD -2.069321 2.1289
34 2015-12-31 APD -4.012371 -3.3608
45 2019-12-31 MLM -5.749301 5.5051
46 2018-12-31 MLM 1.204367 5.3899
47 2017-12-31 MLM 9.086242 -1.4457
48 2016-12-31 MLM 13.984092 2.1289
49 2015-12-31 MLM -4.509655 -3.3608
推荐阅读
- reactjs - 为什么我的 scss 不能在 MacOS 上处理 react 项目
- php - 如何更改laravel中验证错误的键
- python - 将pandas系列的json对象转换为DataFrame
- python - 在numpy中交换下降条的轴
- c++ - 用 atomic bool 同步 10 个线程
- python - 下载和导入时的 TensorFlow 问题
- azure - 使用 ServiceBusTrigger 的 Azure 函数在 Xamarin.Android 应用程序中不起作用
- sql-server - 如何在选择子句中使用表值函数?
- node.js - 如何使用 OIDC (vuejs + nodejs) 对前端和后端进行身份验证?
- javascript - 基于用户选择的角度更改/替换字符串中的值