如何根据对不同变量的第四次观察创建新变量



从此表

ID, Date,  Value
A    Jan01     5      
A    Feb01     10     
A    Mar03     9      
A    Apr02     7      
A    Jan01     2      
B    Feb01     3      
B    Mar01     6   
B    Mar01     9    
B    Mar02     5      

所需表格:

ID, Date,  Value, New_Variable
A    Jan01     5      7
A    Feb01     10     7
A    Mar03     9      7
A    Apr02     7      7
A    Jan01     2      5
B    Feb01     3      5
B    Mar01     6      5
B    Mar01     9      5
B    Mar02     5      5

我知道我能做

df.groupby('ID')['Value'].transform('first')

如果我想取第一个值,那么其他行呢?像第四个还是第五个?

我们可以按IDtransform对数据帧进行分组,Value列和nth从每组中选择第n个值。

df['new_col'] = df.groupby('ID')['Value'].transform('nth', n=3)

print(df)
ID   Date  Value  new_col
0  A  Jan01      5        7
1  A  Feb01     10        7
2  A  Mar03      9        7
3  A  Apr02      7        7
4  A  Jan01      2        7
5  B  Feb01      3        5
6  B  Mar01      6        5
7  B  Mar01      9        5
8  B  Mar02      5        5

注意:n值为零,因此为了选择4th行,您必须指定n=3

一个想法是添加一个排名列来显示一行在其组中的位置。例如:

df['rank'] = df.groupby('ID').cumcount()

在这种情况下,您知道每个ID的第4位。

fourth_place = df[df['rank']==3]

这样你就可以创建一个映射

mapping = fourth_place.set_index('ID')['Value']

可用于创建新的列

df['New_Variable'] = df['ID'].map(mapping)

最新更新