回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个数据帧:</p>
<pre><code>df = pd.DataFrame({'ID':['a','b','d','d','a','b','c','b','d','a','b','a'],
'sec':[3,6,2,0,4,7,10,19,40,3,1,2]})
print(df)
ID sec
0 a 3
1 b 6
2 d 2
3 d 0
4 a 4
5 b 7
6 c 10
7 b 19
8 d 40
9 a 3
10 b 1
11 a 2
</code></pre>
<p>我想计算转换发生了多少次。这里在<code>ID</code>列中<code>a->b</code>被视为一个转换,类似于<code>b->d, d->d, d->a, b->c, c->b, b->a</code>。我可以使用<code>Counter</code>这样做:</p>
<pre><code>Counter(zip(df['ID'].to_list(),df['ID'].to_list()[1:]))
Counter({('a', 'b'): 3,
('b', 'd'): 2,
('d', 'd'): 1,
('d', 'a'): 2,
('b', 'c'): 1,
('c', 'b'): 1,
('b', 'a'): 1})
</code></pre>
<p>我还需要获得这些转换的<code>sec</code>列的最小值和最大值。例如,在这里<code>a->b</code>已经发生了3次,其中最小<code>sec</code>值为<code>1</code>,最大<code>sec</code>值为<code>7</code>。我还想知道<code>a->b</code>0的这个转换第一次发生在哪里。对于{{CD12}}列,我考虑转换的第一个值,即^ {CD13}}的索引,并且对于计算,min,max i取过渡的第二个值,即在^ {CD14> }的值。<p>
<p>以下是我想要得到的最终输出:</p>
<pre><code>df = pd.DataFrame({'ID_1':['a','b','d','d','b','c','b'],
'ID_2':['b','d','d','a','c','b','a'],
'sec_min':[1,2,0,3,10,19,2],
'sec_max':[7,40,0,4,10,19,2],
'transition_index':[0,1,2,3,5,6,10],
'count':[3,2,1,2,1,1,1]})
print(df)
ID_1 ID_2 sec_min sec_max transition_index count
0 a b 1 7 0 3
1 b d 2 40 1 2
2 d d 0 0 2 1
3 d a 3 4 3 2
4 b c 10 10 5 1
5 c b 19 19 6 1
6 b a 2 2 10 1
</code></pre>
<p>如何在Python中实现这一点</p>
<p>而且我有大量的数据,所以我正在寻找最快的方法</p>