gpt4 book ai didi

python - 根据pandas数据框中的序列重新排列列

转载 作者:太空宇宙 更新时间:2023-11-03 20:11:02 25 4
gpt4 key购买 nike

我有一个 pandas 数据框,如下所示。我想根据 XX_ 和 YY_ 列的顺序分别重新排列数据框中的列。

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

我的输出数据框应如下所示:

   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

由于这是一个小数据框,我可以手动重新排列列。有没有办法根据_2、_3后缀做到这一点?

最佳答案

IIUC 我们可以使用基于 Jeff Attwood's 的函数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

关于python - 根据pandas数据框中的序列重新排列列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58717314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com