分组后如何创建变量

时间:2019-05-19 11:03:25

标签: python pandas pandas-groupby

我有一个长格式的熊猫数据框,其中包含一些人的多个条目。我有一个变量,指示自另一个评估(评估A)以来的一个测量时间。我想做的是创建一个新变量,该变量标识相对于评估A的每个评估的时间点,并将每个人的第一个时间点(如果它小于评估A的10天)指定为时间点1,不论自评估A以来的时间如何,其后续度量均为2、3、4等。如果他们的评估A≤10天,则我希望该人的所有条目都为NA。

我确定答案涉及groupby。我可以按每个人的代码进行分组,但是我对如何从那里进行编码非常执着。

我一直尝试遵循的逻辑是: -groupby ID_Code -对于每个ID_Code,测试第一行“自评估A起的时间” <= 10 -如果为true,则在时间点中第一行= 1,并为该ID_Code的第二,三,四等行分配值。 -否则,将该ID_Code的所有行分配为NA

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

谢谢。

{}

1 个答案:

答案 0 :(得分:0)

GroupBy.transformGroupBy.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