2017-11-14 3 views
2

groupby()에서 생성 된 Pandas 데이터 프레임을 플로팅 할 때 몇 가지 문제가 발생하며 이제는 RangeIndex가 있습니다. 나는 두 개의 열을 얻을 수있는 GROUPBY()를 적용Plot Pandas groupby 데이터 프레임

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD')) 
df.head() 
#  A B C D 
# 0 83 99 55 83 
# 1 91 42 14 27 
# 2 44 4 30 9 
# 3 96 46 92 73 
# 4 91 73 17 36 

: A와 지금

gb = df.groupby(pd.cut(df.A, 10)).B.mean() 
gb 
# A 
# (-0.099, 9.9] 38.272727 
# (9.9, 19.8]  49.800000 
# (19.8, 29.7]  55.000000 
# (29.7, 39.6]  50.454545 
# (39.6, 49.5]  46.285714 
# (49.5, 59.4]  44.800000 
# (59.4, 69.3]  48.500000 
# (69.3, 79.2]  55.615385 
# (79.2, 89.1]  45.500000 
# (89.1, 99]  51.866667 
# Name: B, dtype: float64 

gb_df = gb.to_frame().reset_index() 
gb_df 
#    A   B 
# 0 (-0.099, 9.9] 38.272727 
# 1 (9.9, 19.8] 49.800000 
# 2 (19.8, 29.7] 55.000000 
# 3 (29.7, 39.6] 50.454545 
# 4 (39.6, 49.5] 46.285714 
# 5 (49.5, 59.4] 44.800000 
# 6 (59.4, 69.3] 48.500000 
# 7 (69.3, 79.2] 55.615385 
# 8 (79.2, 89.1] 45.500000 
# 9  (89.1, 99] 51.866667 

B.

의 평균 예를 들어

, 여기 내 입력 네 개의 열이있는 데이터입니다 , A와 B를 플롯하려고하면 A 열이 RangeIndex이므로 오류가 발생합니다.

plt.scatter(x=gb_df.A, y=gb_df.B) 

# Traceback (most recent call last): 
# File "<stdin>", line 1, in <module> 
# ValueError: could not convert string to float: (89.1, 99] 

이상적으로는 A 열의 RangeIndex의 하한을 X 축으로 표시하고 싶습니다. 따라서 이와 같은 데이터는 매우 유용 할 것입니다 :

#   A   B 
# 0 -0.099 38.272727 
# 1  9.9 49.800000 
# 2 19.8 55.000000 

어떤 도움을 주셔서 감사합니다.

답변

1

left을 사용하여 leftbreak를 얻습니다.

gb_df['New_A']=gb_df.A.apply(lambda x : x.left).astype('float') 
gb_df.plot.scatter(x = 'New_A', y='B') 

enter image description here

데이터 정보 :

gb_df 
       A   B New_A 
0 (-0.099, 9.9] 39.928571 -0.099 
1 (9.9, 19.8] 33.090909 9.900 
2 (19.8, 29.7] 41.900000 19.800 
3 (29.7, 39.6] 46.500000 29.700 
4 (39.6, 49.5] 52.454545 39.600 
5 (49.5, 59.4] 37.866667 49.500 
6 (59.4, 69.3] 60.600000 59.400 
7 (69.3, 79.2] 71.300000 69.300 
8 (79.2, 89.1] 42.714286 79.200 
9 (89.1, 99.0] 52.545455 89.100 
+0

감사합니다! 어떻게 그 '왼쪽'의 사용을 발견 했습니까? 나는 'RangeIndex'에 대한 팬더 문서 페이지를보고 아무 것도 찾을 수 없었다 : https://pandas.pydata.org/pandas-docs/version/0.21/generated/pandas.RangeIndex.html – stackoverflowuser2010

+0

@ stackoverflowuser2010 남자, 미안, 그것은 왼쪽에 있어야합니다 ... – Wen

+0

@ stackoverflowuser2010 나는 전에 동일한 문제에 직면하고 나서 소스 코드에 가서, 당신은 RangeIndex가 간격에 의해 생성되고, 간격이 스스로 좌우의 호출을한다는 것을 알게 될 것이다. ;-) – Wen