【问题标题】:Plot many plots for each unique Value of one column为一列的每个唯一值绘制许多图
【发布时间】:2021-06-01 23:02:50
【问题描述】:

所以,我正在使用一个大约有 20 列的数据框,但只有三列非常重要。

Index ID Date Time_difference
1 01-40-50 2021-12-01 16:54:00 0 days 00:12:00
2 01-10 2021-10-11 13:28:00 2 days 00:26:00
3 03-48-58 2021-11-05 16:54:00 2 days 00:26:00
4 01-40-50 2021-12-06 19:34:00 7 days 00:26:00
5 03-48-58 2021-12-09 12:14:00 1 days 00:26:00
6 01-10 2021-08-06 19:34:00 0 days 00:26:00
7 03-48-58 2021-10-01 11:44:00 0 days 02:21:00

总共有 90 个唯一 ID 和几千行。我想做的是:

  1. 为每个唯一 ID 创建一个绘图
  2. 每个绘图的 y 轴为“Time_difference”,x 轴为“date”
  3. 每个图都有一条趋势线
  4. 最好是具有所有其他地块的平均值的地块

不胜感激任何关于如何开始的意见!谢谢!

【问题讨论】:

  • Q1 en 2:对 ID 执行 group by,然后对每个组执行 plot 您想要的数据。 Q3:This 帖子展示了如何使用 pandas 添加趋势线,对于 Q4,我不确定你想要什么,但如果你想获得每个日期的平均值,只需在日期上执行 groupby 并平均这些值.
  • 假设我这样做: df_new = df.groupby('ID)').nunique() 现在我只能一次绘制所有内容。我将如何绘制 90 个子图(针对每个唯一 ID),并指定 y 轴和 x 轴?
  • 例如this 发帖。或者循环遍历这些组并为每个组生成一个单独的图。另一种选择是seaborn.FacetGrid,请参阅this 博客(很长的帖子,但有趣的东西在底部)。

标签: python-3.x pandas dataframe


【解决方案1】:

为了以后的文档,解决如下:

首先将 time_delta 转换为整数:

df['hour_difference'] = df['time_difference'].dt.days * 24 + 
df['time_difference'].dt.seconds / 60 / 60

然后创建一个包含 ID 的所有唯一条目的列表:

id_list = df['ID'].unique()

最后,用于绘图的 for 循环:

for i in id_list:
    df.loc[(df['ID'] == i)].plot(y=["hour_difference"], figsize=(15,4))
    plt.title(i, fontsize=18) #Labeling titel
    plt.xlabel('Title name', fontsize=12) #Labeling x-axis 
    plt.ylabel('Title Name', fontsize=12) #Labeling y-axis 

【讨论】:

    猜你喜欢
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多