从多个数据框创建一个箱线图

3

我有三个只包含一列“时间”的数据帧,它们包含不同数量的pandas datetime值行。例如:

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

我想创建一个单独的箱线图(蜡烛图),其中有三个条形图,表示所有数据框中时间分布并排放置。我该如何实现?
1个回答

6
您可以通过给每个数据帧添加一个列来完成此操作,该列保存了用于分组单个值的信息。以下是一个小例子:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

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

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值外,您还可以使用Pandas的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'] )

然后我向每个数据帧添加了一个名为“Data”的列,并附带唯一标识符。

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

现在我将所有的数据框连接起来。

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

使用方法boxplot,你可以按“Data”列对数据进行分组。

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

这将导致以下图像: enter image description here

你的示例中时间列包含整数,而我的包含日期时间对象。用这种方式绘图无法处理日期时间数据。 - cjmaria
我已经编辑了我的示例,以便您可以看到它如何与日期时间一起工作。您需要调用对象的“days”值。 - Mr_Z

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接