从此表
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')
如果我想取第一个值,那么其他行呢?像第四个还是第五个?
我们可以按ID
和transform
对数据帧进行分组,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)