当前有一个按系列划分的国家/地区的数据框,其值范围为0-25
我想对df进行排序,以使最大值出现在左上方(第一个),而最小值出现在右下方(最后一个)。
A B C D ...
USA 4 0 10 16
CHN 2 3 13 22
UK 2 1 8 14
...
D C A B ...
CHN 22 13 2 3
USA 16 10 4 0
UK 14 8 2 1
...
在这种情况下,具有最高值的列现在排在第一位,索引也是如此。
我已经考虑过重新编制索引,但这会丢失“国家”索引。
D C A B ...
0 22 13 2 3
1 16 10 4 0
2 14 8 2 1
...
我考虑过要创建一个新的列和行,该列和行具有相应列/行的均值或总和,但这是最有效的方法吗?
在我有了新的行/列之后,如何对DF排序?
有没有一种方法可以使用...
df_mv.reindex(df_mv.mean(or sum)().sort_values(ascending = False).index, axis=1)
...这将允许我保留国家/地区索引,并对其进行相应的排序?
感谢所有建议或帮助。
编辑
预期结果将列和行从最大到最小进行组织。
关于预期输出中A和B列的第一行,它们分别假定为2、3。这是因为预期结果将总和和均值解释为A列大于B列(即使可以将总和或均值视为行/列的“值”)。
通过说较高的数字将在左上角,而较低的数字将在右下角,我只是将其表示为所得df的总体趋势。但是,预期的重点是整个列和行。对于造成的困扰,我深表歉意。
答案 0 :(得分:4)
您可以使用:
rows_index=df.max(axis=1).sort_values(ascending=False).index
col_index=df.max().sort_values(ascending=False).index
new_df=df.loc[rows_index,col_index]
print(new_df)
D C A B
CHN 22 13 2 3
USA 16 10 4 0
UK 14 8 2 1
答案 1 :(得分:3)
使用.T
至transpose行到列,反之亦然:
df = df.sort_values(df.max().idxmax(), ascending=False)
df = df.T
df = df.sort_values(df.columns[0], ascending=False).T
结果:
>>> df
D C B A
CHN 22 13 3 2
USA 16 10 0 4
UK 14 8 1 2
答案 2 :(得分:1)
这是另一种方式,这次不进行转置,而是使用axis=1
作为参数:
df = df.sort_values(df.max().idxmax(), ascending=False)
df = df.sort_values(df.index[0], axis=1, ascending=False)
答案 3 :(得分:1)
使用>>> b"Ana\xefs's".decode('windows-1252')
"Anaïs's"
>>> b"Ana\xefs's".decode('iso-8859-1')
"Anaïs's"
>>> b"Ana\xefs's".decode('iso-8859-2')
"Anaďs's"
>>> b"Ana\xefs's".decode('iso-8859-4')
"Anaīs's"
>>> b"Ana\xefs's".decode('iso-8859-5')
"Anaяs's"
:
<div class="input-group pl-2">
<input type="text" class="form-control" placeholder="Enter a string...">
<span class="input-group-btn pr-2">
<button class="btn btn-success" type="submit">
<span></span>Search
</button>
</span>
</div>
输出:
AWSMobileClient.default().federatedSignIn(providerName: IdentityProvider.facebook.rawValue, token: (result?.token!.tokenString)!, completionHandler: { (userState, error) in
if let error = error{
print("Initialize Error: ", error.localizedDescription)
}else{
print("User State: ", userState!)//User State: signedIn
switch (userState) {
case .signedIn?:
DispatchQueue.main.async {
self.getAWSToken()
}
default:
print("Sign In needs info which is not et supported.")
}
}
})
func getAWSToken(){
AWSMobileClient.default().getTokens { (result, error) in
if error == nil{
print("JWT Token: ", (result?.idToken?.tokenString!)!)
print("Expire : ", (result?.expiration!)!)
AppData.sharedInstance.JWT_Token = (result?.idToken?.tokenString!)! as String
AppData.sharedInstance.Refresh_Token = (result?.refreshToken?.tokenString!)! as String
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd H:mm:ss"
let dtStr = dateFormatter.string(from: (result?.expiration!)!)
let expireDate = Utility.UTCToLocal(date: dtStr)
AppData.sharedInstance.JWT_Token_Expire_Date = expireDate
UserDefaults.standard.set(AppData.sharedInstance.JWT_Token_Expire_Date, forKey: Utility.KEY_JWT_TOKEN_EXPIRE_DATE)
UserDefaults.standard.set(AppData.sharedInstance.JWT_Token, forKey: Utility.KEY_JWT_Token)
UserDefaults.standard.set(AppData.sharedInstance.Refresh_Token, forKey: Utility.KEY_Refresh_Token)
DispatchQueue.main.async {
self.getUserInfo()
RSApiManager.shared.postDeviceToken(dToken: Utility.MY_TOKEN)
}
}else{
print("Error: ", error.debugDescription)
}
}
}