首页 > 解决方案 > 如何使用标准迭代数据框并绘制结果?

问题描述

我有一个 df,其中包含过去 6 个月的数据。我想将其拆分为 7 个独特的数据框,每个数据框都包含给定日期的数据。星期一、星期二等。我已经有一个名为“工作日”的专栏来帮助解决这个问题。

这是我正在使用的数据:

+---+------------+----------+-----------+------------+
|   |    Date    | Activity |  Weekday  |   Hours    |
+---+------------+----------+-----------+------------+
| 0 | 2020-06-01 | Gen Ab   | Monday    | 347.250000 |
| 1 | 2020-06-02 | Gen Ab   | Tuesday   | 286.266667 |
| 2 | 2020-06-03 | Gen Ab   | Wednesday | 169.583333 |
| 3 | 2020-06-04 | Gen Ab   | Thursday  | 312.633333 |
| 4 | 2020-06-05 | Gen Ab   | Friday    | 317.566667 |
| 5 | 2020-06-08 | Gen Ab   | Monday    | 285.800000 |
| 6 | 2020-06-09 | Gen Ab   | Tuesday   | 213.166667 |
+---+------------+----------+-----------+------------+

这段代码不起作用,但这是我想要完成的:

day = grouped['Weekday'].unique()

for day in day:
    f"df_{str(day)}" = grouped.loc[(grouped['Activity'] == 'Gen Ab')
    & (grouped['Weekday'].isin([f'{day}']))].reset_index(drop=True)

格式化的字符串将是新 df 的名称。所以“df_Monday”、“df_Tuesday”等。

.isin 也使用格式化字符串,因为我每天都在过滤。

最后,我想将每个数据帧绘制成折线图,这样我们就可以看到每天的数据。

我确信有更好的方法来绘制数据(我的最终目标),但我也想知道如何在这里执行这个循环,以防我将来想使用类似的东西。

任何人都可以帮助解决这两个问题吗?

标签: pythonpandasmatplotlib

解决方案


如果您的最终目标只是情节,也许是这样的(结果情节绝对可以美化):

import matplotlib.pyplot as plt

...

fig, ax = plt.subplots()

for day in df['Weekday'].unique():
    temp_df = df[(df['Weekday'] == day) & (df['Activity'] == 'Gen Ab')]
    ax.plot('Date', 'Hours', data=temp_df, label=day)
    
ax.legend(loc='upper right')
fig.autofmt_xdate()

样本输出:

在此处输入图像描述


推荐阅读