【问题标题】:How to create variable after groupby如何在groupby之后创建变量
【发布时间】:2019-05-19 11:03:25
【问题描述】:

我有一个长格式的 pandas 数据框,其中包含一些人的多个条目。我有一个变量表示自另一次单独评估(评估 A)以来的一次测量时间。我想做的是创建一个新变量来标识每个评估相对于评估 A 的时间点,并将每个人的第一个时间点(如果它

我确定答案涉及 groupby。我可以按每个人的代码进行分组,但我很困惑如何从那里开始。

我一直试图遵循的逻辑是: - groupby ID_Code - 对于每个 ID_Code,测试第一行“自评估 A 以来的时间”是否

如果不清楚,我可以提供更多信息。我对使用 python 清理数据很陌生,这是我的第一个 stackoverflow 问题,所以我愿意接受任何提示!

提前致谢。

import pandas as pd

# Current data
df = pd.DataFrame(data={'ID_Code':['AA_01', 'AA_01', 'BB_02', 'CC_03', 'CC_03', 'CC_03', 'CC_03', 'DD_05', 'DD_05'],
                       'Time_since_A':[0, 134, 0, 7, 145, 289, 312, 500, 650]})
print(df)

# Intended output
df2 = pd.DataFrame(data={'ID_Code':['AA_01', 'AA_01', 'BB_02', 'CC_03', 'CC_03', 'CC_03', 'CC_03', 'DD_05', 'DD_05'],
                       'Time_since_A':[0, 134, 0, 7, 145, 289, 312, 500, 650],
                        'Timepoint':[1, 2, 1, 1, 2, 3, 4, 'NA', 'NA']})
print(df2)

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    将GroupBy.transform 和GroupBy.first 用于与原始大小相同的系列,因此可以进行比较,对于过滤后的组,请使用GroupBy.cumcount 作为每个组的计数器:

    mask = df.groupby('ID_Code')['Time_since_A'].transform('first') <= 10
    df.loc[mask, 'Timepoint'] = df[mask].groupby('ID_Code').cumcount() + 1
    print (df)
      ID_Code  Time_since_A  Timepoint
    0   AA_01             0        1.0
    1   AA_01           134        2.0
    2   BB_02             0        1.0
    3   CC_03             7        1.0
    4   CC_03           145        2.0
    5   CC_03           289        3.0
    6   CC_03           312        4.0
    7   DD_05           500        NaN
    8   DD_05           650        NaN
    

    详情:

    print (df.groupby('ID_Code')['Time_since_A'].transform('first'))
    0      0
    1      0
    2      0
    3      7
    4      7
    5      7
    6      7
    7    500
    8    500
    Name: Time_since_A, dtype: int64
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 2019-03-20
      • 2015-11-01
      • 2015-12-08
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      相关资源
      最近更新 更多