从多个数据帧创建单个箱线图

cjm*_*ria 3 python matplotlib dataframe pandas

我有三个数据框,其中仅包含一列“时间”和不同数量的熊猫datetime值行。前任:

      Time
0  3 days    
1  16 days   
2  6 days     
3  4 days     
4  4 days     
5  4 days     
Run Code Online (Sandbox Code Playgroud)

我想创建一个单一的箱线图(烛台),它具有三个并排表示所有数据帧中时间分布的条形图。我该如何去完成这个?

Mr_*_*r_Z 6

您可以通过向每个数据帧添加一列来实现此目的,该列包含用于对单个值进行分组的信息。这是一个小例子:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)

我只生成了一些随机的 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'] )
Run Code Online (Sandbox Code Playgroud)

除了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'] )
Run Code Online (Sandbox Code Playgroud)

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

time1["Data"] = "A"
time2["Data"] = "B"
time3["Data"] = "C"
Run Code Online (Sandbox Code Playgroud)

现在我连接所有数据框。

times = [time1, time2, time3]
allTimes = pd.concat(times)
Run Code Online (Sandbox Code Playgroud)

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

plt.figure()
allTimes.boxplot(by="Data")
Run Code Online (Sandbox Code Playgroud)

这导致以下图像:

在此处输入图片说明