我有以下示例数据帧:
d = {'col1': [4, 2, 8, 4, 3, 7, 6, 9, 3, 5]}
df = pd.DataFrame(data=d)
df
col1
0 4
1 2
2 8
3 4
4 3
5 7
6 6
7 9
8 3
9 5
我需要在这个数据帧上加上col2
,这个新列的值将通过比较col1
个值(来自不同的行)来设置,如下所述.每行col2
个将设置如下:
df.loc[0, "col2"]
会说出df.loc[1, "col1"]
、df.loc[2, "col1"]
和df.loc[3, "col1"]
中有多少大于df.loc[0, "col1"]
.
df.loc[1, "col2"]
会说出df.loc[2, "col1"]
、df.loc[3, "col1"]
和df.loc[4, "col1"]
中有多少大于df.loc[1, "col1"]
.
df.loc[2, "col2"]
会说出df.loc[3, "col1"]
、df.loc[4, "col1"]
和df.loc[5, "col1"]
中有多少大于df.loc[2, "col1"]
.
以此类推.
如果index N
之后没有剩下3 rows
个,则col2
值将被设置为-1
.
最终结果如下所示:
col1 col2
0 4 1
1 2 3
2 8 0
3 4 2
4 3 3
5 7 1
6 6 1
7 9 -1
8 3 -1
9 5 -1
我需要一个函数,它将接受DataFrame作为输入,并将通过添加如上所述的新列返回DataFrame.
在上面的示例中,考虑了接下来的3行.但这需要是可配置的,并且应该是完成工作的函数的输入.
速度在这里很重要,因此不希望用于循环.
在Python中,如何以最有效的方式完成这项工作?