如何操作熊猫中的行块

我有一个大数据库(2.4 亿行),分为多个块,块开始标记(sob)作为列之一,130 万个块。


我创建了一个 block_start 系列:


block_start = pd.series(df[df.sob == True].index)

并计算块长度系列:


block_len = block_start.shift(-1) - block_start.

现在我需要在布尔列中查找每个块是否包含至少一个信号(真):


signals = []


for i in range(len(block_start)):

 signals.append(df.signal[block_start[i]:block_start[i]+block_len[i]].any())

上述循环需要 20 分钟。任何想法如何缩短它?


慕哥6287543
浏览 144回答 2
2回答

守候你守候我

groupby+ cumsum+any您可以groupby计算sob系列的累计总和:df = pd.DataFrame({'signal': [True, False, True, False, False,                              False, True, False, False, False],                   'sob': [True, False, False, False, True,                           False, False, True, False, False]})df['any_flag'] = df.groupby(df['sob'].cumsum())['signal'].transform('any')print(df)   signal    sob  any_flag0    True   True      True1   False  False      True2    True  False      True3   False  False      True4   False   True      True5   False  False      True6    True  False      True7   False   True     False8   False  False     False9   False  False     False
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python