2017-04-22 6 views
2

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에 대한 상자 그림을 만드는 것입니다. 필자가 제공 한 데이터 세트에 따라 여러 ID가 있거나 없을 수 있습니다. 지금 당장은 2 개의 데이터 세트를 위해이 문제를 해결하려고합니다. 가능하다면 동일한 상자 플롯의 모든 데이터와 ID 당 자체 상자 플롯에 표시된 데이터가있는 솔루션을 원합니다.

내가 팬더 아주 새로운 오전 (... 그것을 배우려고 노력) 다만이 알아 내기 위해 걸리는 시간에 좌절하고 ... 여기 내 코드는 ...입니다

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로 색인 된 데이터 사전으로 정렬하는 자국 파일 판독기로 데이터를 제공해서는 안됩니다.

내가 마지막으로 0.19.2이기 때문에, 이것은 0.14.0 버전에서 작동하는 방법 확실하지 않다 팬더 버전 0.14.0 및 파이썬 버전 2.7.7

+1

[matplotlib에서 두 그룹의 데이터 프레임 열의 상자 플롯을 그리는 방법] 가능한 복제본 (http://stackoverflow.com/questions/43209795/how-to-plot-a-box-plot -of-a-column-of-a-data-frame-two-groups-in-matplotlib) – manelfp

답변

1

를 실행하고 - 나는 업그레이드하는 것이 좋습니다 가능한 경우 :

#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 다음 변환 timedeltastotal_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 

마지막 사용 01 2,393,537,146,446,

df.plot.box() 

graph

또한 docs를 확인할 수 있습니다.

+0

내가 떠나야하기 때문에 서두르지 만,이 줄을 할 때 다음과 같은 오류가 발생했습니다 : pd.to_datetime df [TIME_COL]). diff(). apply (lambda x : x.dt.total_seconds()) 대상 : AttributeError : 'numpy.timedelta64'개체에 'dt'속성이 없습니다. – Sharki

+0

당신은 판다의 이전 버전을 가지고 있기 때문에 버그가 있다고 생각합니다 : (업그레이드하십시오.) – jezrael

+0

업그레이드 할 수 없습니다 : (... 이것은 업무용이며 우리가 실행중인 시스템은 사소한 기적 없이는 바꿀 수 없습니다 ... 지난 1 년 동안 모든 소프트웨어를 업데이트했습니다 ... – Sharki