简体   繁体   English

Python pandas 根据值和其他行对多个列进行排序

[英]Python pandas sort multiple columns based on their values and other rows

I would like to sort columns like that as now it just fills in from 0 to make sure there are none我想像这样对列进行排序,因为现在它只是从 0 开始填充以确保没有

    websiteName         0      1       2      3
0   websiteName1    TLSv1.0 TLSv1.1 TLSv1.2 None  
1   websiteName1    TLSv1.2 None    None    None
2   websiteName2    TLSv1.2 TLSv1.3 None    None
3   websiteName3    TLSv1.0 TLSv1.2 TLSv1.3 None
4   websiteName4    TLSv1.2 TLSv1.3 None    None

Expected result预期结果

    websiteName         0      1       2      3
0   websiteName1    TLSv1.0 TLSv1.1 TLSv1.2 None
1   websiteName1    None    None    TLSv1.2 None
2   websiteName2    None    None    TLSv1.2 TLSv1.3 
3   websiteName3    TLSv1.0 None    TLSv1.2 TLSv1.3
4   websiteName4    None    None    TLSv1.2 TLSv1.3

You can melt , then pivot :你可以melt ,然后pivot

(df
 .replace({'None': pd.NA})   # assuming 'None' strings
 .melt(id_vars='websiteName')
 .assign(TLS=lambda d: d['value'])
 .pivot_table(index='websiteName', columns='TLS', values='value', aggfunc='first')
 .set_axis(range(len(df.columns)-1), axis=1) # comment to keep TLSvx.x names
 .reset_index()
)

output: output:

    websiteName        0        1        2        3
0  websiteName1  TLSv1.0  TLSv1.1  TLSv1.2      NaN
1  websiteName2      NaN      NaN  TLSv1.2  TLSv1.3
2  websiteName3  TLSv1.0      NaN  TLSv1.2  TLSv1.3
3  websiteName4      NaN      NaN  TLSv1.2  TLSv1.3

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM