提问人:Michelle 提问时间:10/6/2023 最后编辑:mozwayMichelle 更新时间:10/6/2023 访问量:36
根据 nan 值的序列对 DF 进行排序
Sort DF based on Series with nan values
问:
我有一些带有一些值的数据帧,如下所示:
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 | 香蕉 | 汽车 |
关于如何干净利落地实现这一目标的任何想法?
答:
0赞
mozway
10/6/2023
#1
out = (df_1.set_index('Number')
.reindex(series_1)
.reset_index()
)
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功能有一些问题。
评论