【发布时间】:2018-08-18 03:22:18
【问题描述】:
我有一个这样构建的数据库:
>>> df = pd.DataFrame({'id':[1,1,1,2,2,2,2,3,4],'value':[1,2,3,1,2,3,4,1,1]})
>>> df
id value
0 1 1
1 1 2
2 1 3
3 2 1
4 2 2
5 2 3
6 2 4
7 3 1
8 4 1
并且我想为每个 ID 的第 n 个最大值(此处为 n=2)生成一个虚拟变量,以便所有第 n 个最大值之一的值都等于 1:
id value Largest
0 1 1 0
1 1 2 1
2 1 3 1
3 2 1 0
4 2 2 0
5 2 3 1
6 2 4 1
7 3 1 1
8 4 1 1
我试过了:
df['highest'] = 0
df['highest'].loc[df['value'].isin(df.groupby(['id'])['value'].nlargest(1))] = 1
但如果一个 ID 恰好是另一个 ID 中的最高值,那会错误分配另一个 ID 中的值
【问题讨论】:
-
您的问题是什么?你试过什么?什么没有奏效?请包括您的代码和完整的错误消息(如果有)。
-
我想说,与其创建一个虚拟变量,不如应用一个函数并将 n 设置为它的参数。
标签: python pandas dummy-variable