<p>如果要在X轴上显示所有空箱子-可以这样做:</p>
<pre><code>import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')
new = pd.DataFrame({'td':range(0, int(round(df.td.max() / 100) * 100) + 100, 100)})
(pd.merge(new, df.groupby(df.td//100*100)['profit_loss']
.sum().reset_index(),
how='left')
.fillna(0)
.set_index('td')
.plot.bar()
)
plt.axhline(0, color='k')
</code></pre>
<p><a href="https://i.stack.imgur.com/g6cTl.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/g6cTl.png" alt="enter image description here"/></a></p>
<p>说明:</p>
<p>一个助手DF,包含所有垃圾箱</p>
^{pr2}$
<p>分组原始数据框</p>
<pre><code>In [71]: df.groupby(df.td//100*100)['profit_loss'].sum().reset_index()
Out[71]:
td profit_loss
0 600 695.0
1 1300 1390.0
2 2300 616743.0
3 3100 -828450.0
</code></pre>
<p>合并/结果数据框</p>
<pre><code>In [69]: (pd.merge(new, df.groupby(df.td//100*100)['profit_loss']
....: .sum().reset_index(),
....: how='left')
....: .fillna(0)
....: )
Out[69]:
td profit_loss
0 0 0.0
1 100 0.0
2 200 0.0
3 300 0.0
4 400 0.0
5 500 0.0
6 600 695.0
7 700 0.0
8 800 0.0
9 900 0.0
10 1000 0.0
11 1100 0.0
12 1200 0.0
13 1300 1390.0
14 1400 0.0
15 1500 0.0
16 1600 0.0
17 1700 0.0
18 1800 0.0
19 1900 0.0
20 2000 0.0
21 2100 0.0
22 2200 0.0
23 2300 616743.0
24 2400 0.0
25 2500 0.0
26 2600 0.0
27 2700 0.0
28 2800 0.0
29 2900 0.0
30 3000 0.0
31 3100 -828450.0
32 3200 0.0
</code></pre>