将数据除以十年然后绘制它的seaborn box和whisker

时间:2018-02-18 21:51:37

标签: python pandas numpy dataframe

我有一个大熊猫数据框,其中包括棒球运动员在1871年至2015年间的相应年份的平均值。

  index  year     AVG
    0   1871    0.000000
    1   1871    0.271186
    2   1871    0.291971
    3   1871    0.330827
    4   1871    0.325000
    ...     ...     ....
101305  2015    0.262118
101306  2015    0.151515
101307  2015    0.181818
101308  2015    0.100000
101309  2015    0.245600 

我想为十年平均值创建一个盒子和胡须图。所以1871年至1880年,1881年至1891年的情节......等等。我的计划是在这个数据框中创建另一个专栏,告诉我一个玩家属于哪个十年,但我无法弄明白。

1 个答案:

答案 0 :(得分:0)

考虑使用Python的整数除法和双正斜杠//来定位最接近的10年倍数,然后计算十进制范围。以零结尾的年份应调整前十年。下面用随机数据进行演示(种子重复性)。

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns

np.random.seed(99)
df = pd.DataFrame({'year': sum([[x]*5 for x in range(1871,2015)], []),
                   'AVG': abs(np.random.randn(720))/10})

# NEAREST 10 FOR DECADE START
df['decade_start'] = (df['year'] // 10) * 10 + 1

# ADJUST FOR YEARS ENDING IN ZERO
df.loc[(df['year'] % 10) == 0, 'decade_start'] = df['decade_start'] - 10

# CALCULATE DECADE RANGE
df['decade_range'] = df['decade_start'].astype('str') + ' - ' + \
                     (df['decade_start'] + 9).astype('str') 

plt.figure(figsize=(15,5))
sns.boxplot(x="decade_range", y="AVG", data=df)   

plt.show()
plt.clf()
plt.close()

Box Plot Output