私は列のペアに基づいてデータを並べ替える方法を見つけようとしています。私の現在のコードは非常に近いですが、最終的にJoeをトップに移動したいと考えています - と彼の合計が最大であるので、すべての行を一緒ににしてください。パンダ:個々の行の代わりに行のグループを並べ替える
アップデート1:'Total'
は常に最大ではありません - それは'Yes'
指定を使用する必要がある - (ドル金額の一部が負になることができます)。
アップデート2:私のコードと所望の出力は、'Total'
行が(これは負ドルに)グループ内の別'Dollar'
未満とすることができる場所を示すように更新されているが、それはまだその最初の行であるべきである'Dude'
グループ。
私のコードではグループ化は正しく行われますが、最終的には'Dude'
グループはソートされません。
import pandas as pd
headers = ['Date','Dude','Dollar', 'Total']
df = pd.DataFrame({
'Dude':['Bob','Bob','Sam','Bob','Joe','Joe','Joe','Bob','Sam','Sam','Joe','Sam'],
'Dollar':[4,1,-2,1,5,12,3,2,7,1,4,8],
'Total':['Yes','No','No','No','No','Yes','No','No','Yes','No','No','No'],
'Date':['1/1/2016','1/1/2016','1/1/2016','3/1/2016','3/1/2016','1/1/2016','1/1/2016','5/1/2016','1/1/2016','3/1/2016','5/1/2016','5/1/2016']
}, columns = headers)
df['Date'] = pd.to_datetime(df['Date'])
df.sort_values(by = ['Dude','Total','Date'], ascending = [True, False, True], inplace = True)
出力:
Date Dude Dollar Total
0 2016-01-01 Bob 4 Yes
1 2016-01-01 Bob 1 No
3 2016-03-01 Bob 1 No
7 2016-05-01 Bob 2 No
5 2016-01-01 Joe 12 Yes
6 2016-01-01 Joe 3 No
4 2016-03-01 Joe 5 No
10 2016-05-01 Joe 4 No
8 2016-01-01 Sam 7 Yes
2 2016-01-01 Sam -2 No
9 2016-03-01 Sam 1 No
11 2016-05-01 Sam 8 No
所望の出力:
Date Dude Dollar Total
5 2016-01-01 Joe 12 Yes
6 2016-01-01 Joe 3 No
4 2016-03-01 Joe 5 No
10 2016-05-01 Joe 4 No
8 2016-01-01 Sam 7 Yes
2 2016-01-01 Sam -2 No
9 2016-03-01 Sam 1 No
11 2016-05-01 Sam 8 No
0 2016-01-01 Bob 4 Yes
1 2016-01-01 Bob 1 No
3 2016-03-01 Bob 1 No
7 2016-05-01 Bob 2 No
こんにちはIgor - ありがとう、しかし、私はデータのいずれかを変更したくない、単純にそれを並べ替える。 – pshep123
元のデータに戻しました...例を説明のために変更しました。それとも、それは悪いことですか? – Igor
私はあなたのアイデアが 'merge' +1を使用するのが好きです。 df.merge(totals).sort_values(['Total_Dollar'、 'Dude'、 'Total'、 'Date']、昇順= [0,1,0,1])。drop( 'Total_Dollar '、1) ' – MaxU