繁体   English   中英

根据 pandas dataframe 中的序列重新排列列

[英]Rearranging column based on sequesnce in pandas dataframe

我有一个 pandas dataframe 如下。 我想根据 XX_ 和 YY_ 列的序列分别重新排列 dataframe 中的列。

import numpy as np
import pandas as pd
import math
import sys
import re
data=[[np.nan,2, 5,np.nan,np.nan,1],
      [np.nan,np.nan,2,np.nan,np.nan,np.nan],
      [np.nan,3,np.nan,np.nan,np.nan,np.nan],
      [1,np.nan,np.nan,np.nan,np.nan,1],
      [np.nan,2,np.nan,np.nan,2,np.nan],
      [np.nan,np.nan,np.nan,2,np.nan,5]]
df = pd.DataFrame(data,columns=['XX_4','XX_2','XX_3','YY_4','YY_2','YY_3'])
df

我的 output dataframe 应该如下所示:

   XX_2  XX_3  XX_4  YY_2  YY_3  YY_4
0   2.0   5.0   NaN   NaN   1.0   NaN
1   NaN   2.0   NaN   NaN   NaN   NaN
2   3.0   NaN   NaN   NaN   NaN   NaN
3   NaN   NaN   1.0   NaN   1.0   NaN
4   2.0   NaN   NaN   2.0   NaN   NaN
5   NaN   NaN   2.0   NaN   5.0   2.0

由于这是一个小的 dataframe,我可以手动重新排列列。 有没有基于_2、_3后缀的方法?

IIUC 我们可以使用 function 基于Jeff Attwood 的Mark Byers 撰写的关于对字母数字列进行排序的文章:

https://stackoverflow.com/a/2669120/9375102

import re 
def sorted_nicely( l ): 
    """ Sort the given iterable in the way that humans expect.""" 
    convert = lambda text: int(text) if text.isdigit() else text 
    alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] 
    return sorted(l, key = alphanum_key)

df = pd.DataFrame(data,columns=['XX_9','XX_10','XX_3','YY_9','YY_10','YY_3'])    
data = df.colums.tolist()
print(df[sorted_nicely(data)])
 XX_3  XX_9  XX_10  YY_3  YY_9  YY_10
0   5.0   NaN    2.0   1.0   NaN    NaN
1   2.0   NaN    NaN   NaN   NaN    NaN
2   NaN   NaN    3.0   NaN   NaN    NaN
3   NaN   1.0    NaN   1.0   NaN    NaN
4   NaN   NaN    2.0   NaN   NaN    2.0
5   NaN   NaN    NaN   5.0   2.0    NaN

暂无
暂无

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

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