gpt4 book ai didi

python - 用 Pandas 首次出现的索引计算过渡的最小值和最大值

转载 作者:行者123 更新时间:2023-12-03 15:39:56 27 4
gpt4 key购买 nike

我有一个DataFrame:

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
我想计算转换发生了多少次。此处 IDa->b列中被视为过渡,类似于 b->d, d->d, d->a, b->c, c->b, b->a。我可以像这样使用 Counter来做到这一点:
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})
我还需要获取这些转换的 sec列的最小值和最大值。例如,此处 a->b已发生3次,其中最小 sec值为 1和最大 sec值为 7。另外,我想知道 a->b的0首次发生此转换的位置。对于 transition_index列,我考虑了转换的第一个值,即 a的索引,为了计算最小值,最大值,我选择了转换的第二个值,即value在 b
这是我想要获得的最终输出:
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
如何在Python中实现?
另外,我有大量的数据,因此我正在寻找最快的方法。

最佳答案

您的转换形式为from -> to'transition_index'基于“from”行的索引,而'sec'聚合基于与“to”行关联的值。
我们可以移动ID上的索引和组以及移动后的ID,从而允许我们使用带有命名聚合的单个groupby来获得所需的输出。

df = df.reset_index()
df['index'] = df['index'].shift().astype('Int64')

(df.groupby([df['ID'].shift(1).rename('ID_1'), df['ID'].rename('ID_2')], sort=False)
.agg(sec_min=('sec', 'min'),
sec_max=('sec', 'max'),
transition_index=('index', 'first'),
count=('sec', 'size'))
.reset_index()
)
  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

关于python - 用 Pandas 首次出现的索引计算过渡的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63103703/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com