我的資料框-
dfmodtestes
Account Key Name MonthSinceInception False
1 a0 Gu 20 0.5
1 a6 Gu 15 0.4
1 a9 Gu 35 0.9
2 89 Pa 70 0.8
2 01 Ra 08 0.1
我的目標是保持帳戶順序相同,但基于幾個月后,所有其他列順序必須按降序目標排序 -
dfmodtestes
Account Key Name MonthSinceInception False
1 a9 Gu 35 0.9
1 a6 Gu 20 0.5
1 a0 Gu 15 0.4
2 89 Pa 70 0.8
2 01 Ra 08 0.1
如您所見,帳戶順序是相同的,但所有其他變數應根據 MonthsinceInception 降序排列
我嘗試過
dfmodwhtestes = dfmodwhtestes.sort_values(by = 'MonthsSinceInception', ascending = False)
但這只是根據自成立以來的月份降序對整個資料幀進行排序,所以發生的是賬戶 2(自成立以來的月份 = 70)在第一行,然后賬戶 1 在第二行,因為自成立以來的月份是 35。
uj5u.com熱心網友回復:
嘗試使用sort_values,注意每個檔案升序可以接受 bool 串列:
df.sort_values(['Account', 'MonthSinceInception'], ascending=[True, False])
輸出:
Account Key Name MonthSinceInception False
2 1 a9 Gu 35 0.9
0 1 a0 Gu 20 0.5
1 1 a6 Gu 15 0.4
3 2 89 Pa 70 0.8
4 2 01 Ra 8 0.1
uj5u.com熱心網友回復:
使用groupbyover Accounts,并設定sort=False:
pd.concat(
dd
for _, dd in df.sort_values(
by=["MonthSinceInception"], ascending=False
).groupby(
"Account", sort=False
)
)
設定演示:
import pandas as pd
columns="Account Key Name MonthSinceInception False".split()
data =[
[part for part in line.split(" ") if part] for line in """\
2 89 Pa 70 0.8
2 01 Ra 08 0.1
1 a0 Gu 20 0.5
1 a6 Gu 15 0.4
1 a9 Gu 35 0.9
""".splitlines()]
data
df = pd.DataFrame(data, columns=columns)
產生:
Account Key Name MonthSinceInception False
0 2 89 Pa 70 0.8
1 2 01 Ra 08 0.1
4 1 a9 Gu 35 0.9
2 1 a0 Gu 20 0.5
3 1 a6 Gu 15 0.4
注意:我故意交換帳戶 1 和 2 以顯示 groupby 在指定時如何保留順序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/527139.html
