【问题标题】:DataFrame columns sort by a given list and add empty columns for missing columnsDataFrame 列按给定列表排序,并为缺少的列添加空列
【发布时间】:2020-07-30 03:53:49
【问题描述】:

我有一个如下的DataFrame。

df =  pd.DataFrame(
    {  
       "code": ["AA", "BB", "CC","DD"],
        "YA" : [2,1,1,np.nan],
        "YD" : [1,np.nan,np.nan,1],
        "ZB" : [1,np.nan,np.nan,np.nan],
        "ZD" : [1,np.nan,np.nan,1]       
    }
)

另外,我有一个排序列表。

sort_list = ['YD','YA', 'ZD', 'YB', 'ZA', 'ZB']

我正在尝试根据排序列表添加缺少的列并对 DataFrame 进行排序。

预期输出:

   code YD  YA  ZD  YB  ZA  ZB
0   AA  1.0 2.0 1.0 NaN NaN 1.0
1   BB  NaN 1.0 NaN NaN NaN NaN
2   CC  NaN 1.0 NaN NaN NaN NaN
3   DD  1.0 NaN 1.0 NaN NaN NaN

我可以使用下面的代码得到结果。是否有另一种(简单)方法可以做到这一点?

我的代码:

col_list = list(set(sort_list) - set(df.columns.to_list()))
df1 = pd.DataFrame(index=df.index, columns=col_list)
df1 = df1.fillna(np.nan)
df2 = df.join(df1, how='left')
df2 = df2.set_index('code')
df2 = df2[sort_list]
df2 = df2.reset_index()
df2

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    尝试使用reindex:

    df = df.reindex(columns=['code'] + sort_list)
    

    df:

        code    YD  YA  ZD  YB  ZA  ZB
    0   AA      1.0 2.0 1.0 NaN NaN 1.0
    1   BB      NaN 1.0 NaN NaN NaN NaN
    2   CC      NaN 1.0 NaN NaN NaN NaN
    3   DD      1.0 NaN 1.0 NaN NaN NaN
    

    【讨论】:

    • 你真是个天才,Pygirl!!!!恭喜!我找这个很久了。
    猜你喜欢
    • 2017-01-21
    • 2015-10-06
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2019-04-08
    • 2021-11-21
    相关资源
    最近更新 更多