<p>你可以:</p>
<ol>
<li>通过<code>exit_time</code>创建一组所有<code>entry_time</code>的计数,然后将数据帧自身合并,以计算出要减去的值(每个<code> entry_time</code>的存量计数)</李>
<li>但是,您不能仅从行号中减去该特定行的值(行号为<code>df.index + 1</code>,但您需要首先执行<code>df = df.reset_index(drop=True)</code>,就像我在第一行代码中所做的那样)。然后,您需要使用<code>.cumsum()</code>减去累积和</李>
</ol>
<hr/>
<pre><code>df = df.reset_index(drop=True)
s = (pd.merge(df,
df[['exit_time']].assign(exit_count=df.groupby('exit_time')['entry_time'].transform('count'))
.rename({'exit_time':'entry_time'}, axis= 1)
.drop_duplicates(subset='entry_time')
,on='entry_time', how='left'))['exit_count'].fillna(0)
df['COUNT'] = df.index + 1 - s.cumsum()
df
Out[1]:
entry_time exit_time stk COUNT
0 2020-06-10 2020-06-23 SHANKARA 1.0
1 2020-06-11 2020-06-25 PNCINFRA 2.0
2 2020-06-11 2020-06-25 DYNAMATECH 3.0
3 2020-06-15 2020-06-29 MANINDS 4.0
4 2020-06-16 2020-06-24 ASTERDM 5.0
5 2020-06-18 2020-06-29 JKPAPER 6.0
6 2020-06-18 2020-06-23 SOMANYCERA 7.0
7 2020-06-18 2020-06-25 EVERESTIND 8.0
8 2020-06-18 2020-07-01 JSLHISAR 9.0
9 2020-06-19 2020-06-25 IBVENTURES 10.0
10 2020-06-19 2020-07-02 FIEMIND 11.0
11 2020-06-19 2020-06-23 SUPRAJIT 12.0
12 2020-06-19 2020-07-01 NRBBEARING 13.0
13 2020-06-19 2020-06-24 SPAL 14.0
14 2020-06-19 2020-06-29 DALBHARAT 15.0
15 2020-06-22 2020-07-06 SANGINITA 16.0
16 2020-06-22 2020-07-06 BBL 17.0
17 2020-06-22 2020-07-06 SHARDAMOTR 18.0
18 2020-06-22 2020-07-06 BALAMINES 19.0
19 2020-06-22 2020-06-25 KIRLOSIND 20.0
20 2020-06-22 2020-07-06 NATCOPHARM 21.0
21 2020-06-23 2020-07-06 QUICKHEAL 19.0
22 2020-06-23 2020-07-07 HMVL 17.0
23 2020-06-24 2020-07-08 ASTRAL 16.0
24 2020-06-26 2020-07-10 MENONBE 17.0
25 2020-07-06 2020-07-16 BSE 12.0
26 2020-07-07 2020-07-20 GARFIBRES 12.0
27 2020-07-16 2020-07-30 SATIA 12.0
28 2020-07-17 2020-07-31 THYROCARE 13.0
29 2020-08-04 2020-08-07 CREATIVE 14.0
</code></pre>
<p>然后,要按每<code>entry_time</code>的最大库存进行汇总,可以使用<code>.groupby()</code>:</p>
<pre><code>df = df.groupby('entry_time')['COUNT'].max().reset_index()
df
Out[2]:
entry_time COUNT
0 2020-06-10 1.0
1 2020-06-11 3.0
2 2020-06-15 4.0
3 2020-06-16 5.0
4 2020-06-18 9.0
5 2020-06-19 15.0
6 2020-06-22 21.0
7 2020-06-23 19.0
8 2020-06-24 16.0
9 2020-06-26 17.0
10 2020-07-06 12.0
11 2020-07-07 12.0
12 2020-07-16 12.0
13 2020-07-17 13.0
14 2020-08-04 14.0
</code></pre>