Pandas按起始值/结束值分组

2024-10-08 18:22:05 发布

您现在位置:Python中文网/ 问答频道 /正文

给出一些数据,比如

pd.DataFrame(list('SxxxxxxxxESxxxxESxxxxxxxxxxxxE'))

我怎样才能把它分成以“S”开头,以“E”结尾的块?在

实际的数据当然更复杂,有一列包含上面的数据,还有其他列我想在上面使用groupby。在

最终目标是能够从其他列(例如,给定的神秘函数group_chunks执行此操作,myData.groupby('Person').group_chunks().Value.sum())检索并处理所有S/E分隔的块。在

更新

响应对更真实数据和期望输出的请求,数据看起来像:

^{pr2}$

所以使用神话中的group_chunks(记住START和{}之间的行数并不总是相同的),我想做如下的事情

df.groupBy('PID').group_chunks('Flag', 'START', 'END').Value.sum()

得到一个结果

   Cond   PID   Value.sum
0     A     1    2.445172
1     B     1    2.347153
2     A     2    3.583813

Tags: 数据函数dataframevalue结尾grouppidstart
2条回答

您认为使用regex可以帮助解决问题,而不是将字符串作为字符列表处理吗?例如:

import re
pattern = r'S.+?E'
re.findall(pattern, 'SxxxxxxxxESxxxxESxxxxxxxxxxxxE')

这里有一个使用numpy的选项。它至少能让你朝着正确的方向开始。为了方便阅读,我给你的专栏起了个“SE”的名字:

df = pd.DataFrame(list('SxxxxxxxxESxxxxESxxxxxxxxxxxxE'), columns=['SE'])

split_points = np.where(df['SE'] == 'E')[0] + 1 # array of after-"E" indices
found = np.array_split(df['data'], split_points) # split series
found = found[:-1] # remove the empty series at the end of the list

相关问题 更多 >

    热门问题