我有一个代表肿瘤之间接触事件的数据集.数据集按"基本肿瘤"分组,然后按"邻居肿瘤"和"时间范围"排序,如下所示:

index base-tumor neighbor-tumor timeframe
0 Track_1 Track_4 1
1 Track_1 Track_4 2
2 Track_1 Track_4 3
3 Track_1 Track_4 4
4 Track_1 Track_4 8
5 Track_1 Track_4 9
6 Track_1 Track_4 10
7 Track_1 Track_6 1
8 Track_1 Track_6 2

因为数据帧是按基本肿瘤分组的,所以我有多个具有上升基本肿瘤的数据帧.

我试图得到的最终结果是一个包含所有曲目的词典,其中包含一个包含所有联系人事件的词典,然后它们包含一个帧列表,其中有一系列联系人事件.看起来是这样的:

{Track_1: {Track_4: [[1,4], [8,10], 
           Track_6: [[1,2]]},
 Track_2: {Track_5: [[10, 14], [20, 25], [28, 31]}}

到目前为止,我做了一个额外的列,如果有序列,则显示1,如果没有联系人事件序列,则显示0.

def get_sequence(df):
    
    for id, grp in df:
        prev_id = grp['id_2'].shift(1).fillna(0)
        prev_frame = grp['FRAME'].shift(1)
        
        conditions = [
            ((grp['id_2'] == prev_id) & 
            (grp['FRAME']) - prev_frame == 1)
        ]

        
        choises = [1]
        
        grp['sequence'] = np.select(conditions, choises, default=0)
        print(grp)

现在我陷入了困境,不知道我是否朝着正确的方向前进,如果是的话,如何迈出下一步.

推荐答案

以下是一种方法:

# Identify continuous timeframes.
df['consec'] = df.groupby(['base-tumor', 'neighbor-tumor'])['timeframe'].transform(lambda s: s.diff().ne(1).cumsum())

# Get timeframe intervals.
t_df = (df.groupby(['base-tumor', 'neighbor-tumor', 'consec']).
        agg(t_start=('timeframe', 'first'), t_end=('timeframe', 'last')).
        droplevel(-1)
       )
t_df = t_df[t_df['t_start'].ne(t_df['t_end'])]
t_df['interval'] = list(zip(t_df['t_start'], t_df['t_end']))

# Convert to dictionary.
result = {k: g.droplevel(0)['interval'].groupby(level=0).agg(list).to_dict()
          for k, g in t_df.drop(columns=['t_start', 't_end']).groupby(level=0)}

print(result)
{'Track_1': {'Track_4': [(1, 4), (8, 10)], 'Track_6': [(1, 2)]}}

Python相关问答推荐

想要使用Polars groupby_Dynamic来缩减时间序列收件箱(包括空垃圾箱)

Pandas滚动分钟,来自其他列的相应值

Django注释:将时差转换为小数或小数

在Python中管理多个OpenGVBO和VAO实例

如何根据条件在多指标框架上进行groupby

输出中带有南的亚麻神经网络

Pandas - groupby字符串字段并按时间范围 Select

如何让程序打印新段落上的每一行?

从spaCy的句子中提取日期

形状弃用警告与组合多边形和多边形如何解决

如何保持服务器发送的事件连接活动?

无法连接到Keycloat服务器

让函数调用方程

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

Python Pandas获取层次路径直到顶层管理

如何在达到end_time时自动将状态字段从1更改为0

如何排除prefecture_related中查询集为空的实例?

以逻辑方式获取自己的pyproject.toml依赖项

Python Pandas—时间序列—时间戳缺失时间精确在00:00

从源代码显示不同的输出(机器学习)(Python)