Boxplot熊猫数据

时间:2017-04-22 19:12:23

标签: python pandas dataframe boxplot

DataFrame如下:

        ID1             ID2 
0   00:00:01.002    00:00:01.002
1   00:00:01.001    00:00:01.006
2   00:00:01.004    00:00:01.011
3   00:00:00.998    00:00:01.012
4       NaT         00:00:01.000
                ...
20      NaT         00:00:00.998

我要做的是为每个ID创建一个boxplot。根据我提供的数据集,可能有也可能没有多个ID。目前我正试图为2个数据集解决这个问题。如果可能的话,我想要一个解决方案,其中所有数据都在同一个boxplot上,然后是另一个,每个ID都有自己的boxplot数据。

我对熊猫非常陌生(试图学习它......)而且我对这需要花多长时间感到沮丧......这是我的代码......

deltaTime = pd.DataFrame() #Create blank df
for x in range(0, len(totIDs)):
   ID = IDList[x]
   df = pd.DataFrame(data[ID]).T
   deltaT[ID] = pd.to_datetime(df[TIME_COL]).diff()
deltaT.boxplot()

非常简单似乎无法在绘制每个ID的箱线图时做到我想要的。我不应该通过本地文件阅读器向我提供数据,该文件阅读器需要几个复杂的文件并将它们分类到由ID索引的数据字典中。

我正在运行pandas版本0.14.0和python版本2.7.7

1 个答案:

答案 0 :(得分:1)

我不确定这在0.14.0版本中是如何工作的,因为最后是0.19.2 - 我建议尽可能升级:

#sample data
np.random.seed(180)
dates = pd.date_range('2017-01-01 10:11:20', periods=10, freq='T')
cols = ['ID1','ID2']
df = pd.DataFrame(np.random.choice(dates, size=(10,2)), columns=cols)
print (df)
                  ID1                 ID2
0 2017-01-01 10:12:20 2017-01-01 10:17:20
1 2017-01-01 10:16:20 2017-01-01 10:20:20
2 2017-01-01 10:18:20 2017-01-01 10:17:20
3 2017-01-01 10:12:20 2017-01-01 10:16:20
4 2017-01-01 10:14:20 2017-01-01 10:18:20
5 2017-01-01 10:18:20 2017-01-01 10:19:20
6 2017-01-01 10:17:20 2017-01-01 10:12:20
7 2017-01-01 10:13:20 2017-01-01 10:17:20
8 2017-01-01 10:16:20 2017-01-01 10:11:20
9 2017-01-01 10:13:20 2017-01-01 10:19:20

致电DataFrame.diff,然后将timedeltas转换为total_seconds

df = df.diff().apply(lambda x: x.dt.total_seconds())
print(df)
     ID1    ID2
0    NaN    NaN
1  240.0  180.0
2  120.0 -180.0
3 -360.0  -60.0
4  120.0  120.0
5  240.0   60.0
6  -60.0 -420.0
7 -240.0  300.0
8  180.0 -360.0
9 -180.0  480.0

上次使用DataFrame.plot.box

df.plot.box()

graph

您还可以查看docs