【问题标题】:Creating a single boxplot from multiple dataframes从多个数据框创建单个箱线图
【发布时间】:2019-03-22 22:28:01
【问题描述】:

我有三个数据框,其中仅包含一列“时间”和不同行数的 pandas datetime 值。例如:

      Time
0  3 days    
1  16 days   
2  6 days     
3  4 days     
4  4 days     
5  4 days     

我想创建一个单一的箱线图(烛台),其中三个条形图并排表示所有数据帧中的时间分布。 我该怎么做呢?

【问题讨论】:

    标签: python pandas dataframe matplotlib


    【解决方案1】:

    您可以通过向每个数据框添加一列来完成此操作,该列包含对单个值进行分组的信息。这是一个小例子:

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    

    我只生成了一些随机的 int 值。

    time1 = pd.DataFrame(np.random.randint(1,30,10), columns=['Time'] )
    time2 = pd.DataFrame(np.random.randint(1,30,10), columns=['Time'] )
    time3 = pd.DataFrame(np.random.randint(1,30,10), columns=['Time'] )
    

    除了int 值,您还可以使用pands Timedelta。但是你需要得到天的价值。

    time1 = pd.DataFrame([pd.Timedelta(days=random.randint(0,30)).days for x in range(10)], columns=['Time'] )
    time2 = pd.DataFrame([pd.Timedelta(days=random.randint(0,30)).days for x in range(10)], columns=['Time'] )
    time3 = pd.DataFrame([pd.Timedelta(days=random.randint(0,30)).days for x in range(10)], columns=['Time'] )
    

    然后我将“数据”列添加到每个具有唯一标识符的数据帧中。

    time1["Data"] = "A"
    time2["Data"] = "B"
    time3["Data"] = "C"
    

    现在我连接所有数据帧。

    times = [time1, time2, time3]
    allTimes = pd.concat(times)
    

    使用boxplot 方法,您现在可以按“数据”列对数据进行分组

    plt.figure()
    allTimes.boxplot(by="Data")
    

    这会产生以下图像:

    【讨论】:

    • 您在示例中的时间列包含整数,我的包含日期时间对象,并且以这种方式绘制不适用于日期时间。
    • 我已经编辑了我的示例,以便您可以看到它是如何与日期时间一起工作的。您需要调用对象的 days 值。
    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2021-12-27
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多