python-3.x 基于ID和日期向多行 Dataframe 添加时间点

svmlkihl  于 2023-01-10  发布在  Python
关注(0)|答案(1)|浏览(122)

正如标题所示,我的 Dataframe 如下所示:
| 识别号|随访月|值-x|值-y|
| - ------| - ------| - ------| - ------|
| 1个|无|十二|十二|
| 1个|无|十一|十四|
| 第二章|无|十个|十一|
| 第二章|三个|十一|无|
| 第二章|无|十二|1个|
| 1个|三个|十三|十二|
| 第二章|三个|十一|五个|
我想添加另一个名为timepoint的列,使表格看起来如下所示:
| 识别号|随访月|值-x|值-y|时间点|
| - ------| - ------| - ------| - ------| - ------|
| 1个|无|十二|十二|1个|
| 1个|无|十一|十四|1个|
| 第二章|无|十个|十一|1个|
| 第二章|三个|十一|无|第二章|
| 第二章|无|十二|1个|1个|
| 1个|三个|十三|十二|第二章|
| 第二章|三个|十一|五个|第二章|
| 第二章|三个|十一|无|第二章|
| 第二章|无|十二|1个|1个|
| 1个|三个|十三|十二|第二章|
| 第二章|三个|十一|五个|第二章|
到目前为止,我试着按ID和月份对行进行分组,然后使用cumcount应用一个时间点。这没有给我任何结果,如果能帮助我处理这个问题,我将不胜感激。

rjee0c15

rjee0c151#

从您的表中,我只能推断出您希望基于Follow up month中的相应值创建Timepoint列,该列看起来如下所示:

from io import StringIO
import pandas as pd
wt = StringIO("""ID  Follow up month  Value-x  value -y
1  0  12  12
1  0  11  14
2  0  10  11
2  3  11  0
2  0  12  1
1  3  13  12
2  3  11  5""")

df = pd.read_csv(wt, sep='\s\s+')
df['Timepoint'] = df['Follow up month'].apply(lambda x: 1 if x==0 else 2)
df

输出:

ID  Follow up month  Value-x  value -y  Timepoint
0   1                0       12        12          1
1   1                0       11        14          1
2   2                0       10        11          1
3   2                3       11         0          2
4   2                0       12         1          1
5   1                3       13        12          2
6   2                3       11         5          2

编辑

根据您的评论,这应该是您想要的:

def timepoint(s):
    if not s.isin([0]).any() and s.iloc[0] == 3:
        return 1
    else:
        return s.apply(lambda x: 1 if x==0 else 2)

df['Timepoint'] = df.groupby('ID')['Follow up month'].transform(timepoint)

相关问题