df = pd.read_csv('species.csv')
df = df.dropna()
df['A'] = np.random.rand(len(df)) * 100 + 1

def nested_pie(df):
    cols = df.columns.tolist()
outd = {}
gb = df.groupby(cols[0], sort=False).sum()
outd[0] = {'names': gb.index.values, 'values': gb.values}
for lev in range(1, 7):
    gb = df.groupby(cols[:lev + 1], sort=False).sum()
outd[lev] = {'names': gb.index.levels[lev][gb.index.labels[lev]].tolist(),
    'values': gb.values}
return outd
outd = nested_pie(df)
diff = 1 / 7.0
plt.pie(outd[6]['values'], labels=outd[6]['names'], labeldistance=0.9,
    colors=plt.style.library['bmh']['axes.color_cycle'])
ax = plt.gca()
for i in np.arange(5, -1, -1):
    ax.pie(outd[i]['values'], labels=outd[i]['names'], radius=np.float(i + 
        1) / 7.0, labeldistance=(2 * (i + 1) - 1) / 14.0 / ((i + 1) / 7.0),
        colors=plt.style.library['bmh']['axes.color_cycle'])
ax.set_aspect('equal')
Hierarchic pie/donut chart from Pandas DataFrame using bokeh or matplotlib