根据 nan 值的序列对 DF 进行排序

Sort DF based on Series with nan values

提问人:Michelle 提问时间:10/6/2023 最后编辑:mozwayMichelle 更新时间:10/6/2023 访问量:36

问:

我有一些带有一些值的数据帧,如下所示:

DF 1:

水果 类型
100 香蕉 汽车
300 苹果 总线
400 几维鸟 卡车
330 房子 自行车

我正在尝试根据系列对它们进行排序。

系列一:

300
400
330
100

如果我执行以下操作,这通常有效:

df_1 = df_1.set_index('Number')
df_1 = df_1.loc[series_1]
df_1 = df_1.reset_index()

现在唯一的问题是我的序列可能比 DF 长,并且包含一些 nan 值,如下所示:

系列2:

300
400
330
100

这会产生以下排序:

DF 1 - 排序 false:

水果 类型
300 苹果 总线
400 几维鸟 卡车
330 房子 自行车
100 香蕉 汽车

但我希望它能产生什么,以保持原始系列的大小,如下所示。这很重要,因为我稍后将它们与其他 DF 水平堆叠,如果其中一个系列行被丢弃,这将不再起作用。

DF 1 - 向右排序:

水果 类型
300 苹果 总线
400 几维鸟 卡车
330 房子 自行车
100 香蕉 汽车

关于如何干净利落地实现这一目标的任何想法?

Python Pandas 数据帧 排序 系列

评论


答:

0赞 mozway 10/6/2023 #1

使用 reindex 而不是 loc

out = (df_1.set_index('Number')
           .reindex(series_1)
           .reset_index()
       )

或者,您也可以在转换系列to_frame进行合并

out = pd.merge(series_1.to_frame(name='Number'), df, how='left')

输出:

   Number   Fruit   Type
0   300.0   apple    bus
1     NaN     NaN    NaN
2   400.0    kiwi  truck
3   330.0   house   bike
4   100.0  banana    car

评论

0赞 Michelle 10/9/2023
谢谢,这里的第一个重新索引解决方案运行良好。不幸的是,合并解决方案没有,我对to_frame功能有一些问题。