pandas: 如何按列名排序数据框并添加空列

-1 投票
3 回答
937 浏览
提问于 2025-04-18 01:10

我的数据框看起来是这样的

df =

        1324    1322    1323    1326    1327    1328    1329
278650  2.15    2.15    2.15    2.15    2.15            2.15
535947  2.15    2.15    2.15    2.15    2.15            2.15

我想把它们排序成下面这样

        1322    1323    1324    1326    1327    1328    1329
278650  2.15    2.15    2.15    2.15    2.15            2.15
535947  2.15    2.15    2.15    2.15    2.15            2.15

我尝试使用pandas的排序功能,sort和sort_index

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort.html http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_index.html

但是我没弄明白它是怎么工作的

有没有什么有效的方法可以做到这一点?

另外,列中有缺失值

1322, 1323, 1324, 缺失, 1326, 1327, 1328, 1329

所以我想在有缺失值的地方添加一个空列。

在这种情况下

        1322    1323    1324    1325    1326    1327    1328    1329
278650  2.15    2.15    2.15            2.15    2.15            2.15
535947  2.15    2.15    2.15            2.15    2.15            2.15

注意,列的边界是1322到1373。


我通过这样解决了第一个问题

     weeks = range(1322,1374)
     df = df.loc[:,weeks]

3 个回答

1

现在因为sort这个功能已经不再推荐使用

所以要用sort_index

比如:

df.sort_index(axis=1,inplace=True)

或者:

df=df.sort_index(axis=1)  

这两种情况:

print(df)

都能达到想要的效果。

1

关于排序:

http://pandas.pydata.org/pandas-docs/version/0.13.1/generated/pandas.DataFrame.sort.html

关于添加新列:

可以使用原来的 df1 索引来创建一个新的系列:

df1['e'] = Series(np.random.randn(sLength), index=df1.index)
1

试试这个:

df.sort_index(axis = 1,inplace = True) ##Sorts the DataFrame by columns (axis = 1) in place

来解决排序的问题,然后试试这个:

import pandas as pd
desired_cols = range(1322,1374)
for col in desired_cols:
    if col not in df.columns:
        df[col] = pd.Series([])
    else:
        pass

来添加那些有 np.nan 值的列。

撰写回答