【发布时间】:2019-09-11 14:40:12
【问题描述】:
我正在尝试根据 rolls 首先降序对以下数据帧进行排序,然后是 diff_vto 对于正值升序,最后是 diff_vto 对于负值升序。这是原始数据框:
day prob vto rolls diff diff_vto
0 1 10 14 27.0 0.0 -13
1 2 10 14 20.0 3.0 -12
2 3 7 14 16.0 4.0 -11
3 4 3 14 12.0 -3.0 -10
4 5 6 14 17.0 3.0 -9
5 6 3 14 14.0 -5.0 -8
6 7 8 14 14.0 5.0 -7
7 8 3 14 9.0 0.0 -6
8 9 3 14 9.0 0.0 -5
9 10 3 14 17.0 0.0 -4
10 11 3 14 22.0 -8.0 -3
11 12 11 14 27.0 3.0 -2
12 13 8 14 23.0 0.0 -1
13 14 8 14 25.0 1.0 0
14 15 7 14 27.0 -3.0 1
如果您希望复制它,这是代码:
import pandas as pd
a = {'day':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],'prob':[10,10,7,3,6,3,8,3,3,3,3,11,8,8,7],'vto':[14,14,14,14,14,14,14,14,14,14,14,14,14,14,14]}
df = pd.DataFrame(a)
df.loc[len(df)+1] = df.loc[0] #Add an extra 2 days for rolling rolling
df.loc[len(df)+2] = df.loc[1] #Add an extra 2 days for rolling
df['rolls'] = df['prob'].rolling(3).sum()
df['rolls'] = df['rolls'].shift(periods=-2) #Displace rolls to match the index + 2
df['diff'] = df['prob'].diff(periods=-1) #Prob[i] - Prob[i+1]
df['diff_vto'] = df['day'] - df['vto']
df = df.head(15)
print(df)
我希望能够根据rolls(降序)对数据帧进行排序,然后是最小值diff_vto(当它为正值时)(升序),然后是最小值diff_vto(当它为负值时)(上升)。根据上面发布的数据框,这将是预期的输出:
day prob vto rolls diff diff_vto
14 15 7 14 27.0 -3.0 1
0 1 10 14 27.0 0.0 -13
11 12 11 14 27.0 3.0 -2
13 14 8 14 25.0 1.0 0
12 13 8 14 23.0 0.0 -1
10 11 3 14 22.0 -8.0 -3
1 2 10 14 20.0 3.0 -12
4 5 6 14 17.0 3.0 -9
9 10 3 14 17.0 0.0 -4
2 3 7 14 16.0 4.0 -11
5 6 3 14 14.0 -5.0 -8
6 7 8 14 14.0 5.0 -7
3 4 3 14 12.0 -3.0 -10
7 8 3 14 9.0 0.0 -6
8 9 3 14 9.0 0.0 -5
我显然尝试过应用.sort_values(),但我无法让条件排序在diff_vto 上工作,因为将其设置为升序显然会将负值放在正值之前。我可以请教一个建议吗?谢谢。
【问题讨论】:
-
您输入的数据和代码不匹配。
-
啊抱歉,我一定是为了让这个例子更难听,现在编辑。