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
答案 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
df.plot.box()
您还可以查看docs。