我有一个大熊猫数据框,其中包括棒球运动员在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年的情节......等等。我的计划是在这个数据框中创建另一个专栏,告诉我一个玩家属于哪个十年,但我无法弄明白。
答案 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()