我有两个数据帧,它们之间共享一个ID列. 第一个数据帧被拆分并发送给数据所有者进行更新. 一旦返回,它们将再次放回单个数据帧中. 现在已经更新了一个数据帧,其中包含尚未具有ID的新条目,并且其顺序也与最初不同. Df1是旧的,df2是新的 我希望根据df1中的ID列对df2进行排序,并将新条目留在底部. ID是随机生成的,没有顺序,这是设计出来的.

有什么好方法可以做到这一点吗? 我看了this个帖子,它利用了索引.我可以将我的ID列作为索引,但由于一些新条目还没有ID,所以这不起作用.

我对这里的情况做了一个模拟:

df=pd.DataFrame(columns=['Name','DataOwner','UniqueID'], data=[['P1',1,123],['P2',2,321],['P3',3,456]])
df2=pd.DataFrame(columns=['Name','DataOwner','UniqueID'], data=[['P1',1,123],['P4', 1, ],['P2',2,321],['P5',2,],['P3',3,456], ['P6', 3, ]])

这会产生以下两个数据帧:

  Name  DataOwner  UniqueID
0   P1          1       123
1   P2          2       321
2   P3          3       456
  Name  DataOwner  UniqueID
0   P1          1     123.0
1   P4          1       NaN
2   P2          2     321.0
3   P5          2       NaN
4   P3          3     456.0
5   P6          3       NaN

项目的名称是描述性文本,不能用于排序,数据所有者不会排序,只是放在那里说明数据是由数据所有者返回的,在我需要根据ID进行排序之前,将数据放在一个大的数据框中,并在底部添加新条目.

我想要的结果是:

  Name  DataOwner  UniqueID
0   P1          1       123
1   P2          2       321
2   P3          3       456
  Name  DataOwner  UniqueID
0   P1          1     123.0
2   P2          2     321.0
4   P3          3     456.0
1   P4          1       NaN
3   P5          2       NaN
5   P6          3       NaN

尽管新条目的顺序并不重要--它们只需要排在底部.

推荐答案

使用sort_values进制自定义密钥的一个选项:

key = pd.Series({k:v for v,k in enumerate(df['UniqueID'].unique())})

out = df2.sort_values(by='UniqueID', key=key.reindex, na_position='last')

输出:

  Name  DataOwner  UniqueID
0   P1          1     123.0
2   P2          2     321.0
4   P3          3     456.0
1   P4          1       NaN
3   P5          2       NaN
5   P6          3       NaN

Python相关问答推荐

指示组内的rejected_time是否在creation_timestamp后5分钟内

如何使用SubProcess/Shell从Python脚本中调用具有几个带有html标签的参数的Perl脚本?

如何根据另一列值用字典中的值替换列值

将numpy数组存储在原始二进制文件中

根据条件将新值添加到下面的行或下面新创建的行中

PywinAuto在Windows 11上引发了Memory错误,但在Windows 10上未引发

对于一个给定的数字,找出一个整数的最小和最大可能的和

log 1 p numpy的意外行为

基于字符串匹配条件合并两个帧

pyscript中的压痕问题

实现自定义QWidgets作为QTimeEdit的弹出窗口

Python+线程\TrocessPoolExecutor

基于形状而非距离的两个numpy数组相似性

下三角形掩码与seaborn clustermap bug

寻找Regex模式返回与我当前函数类似的结果

在matplotlib中使用不同大小的标记顶部添加批注

根据客户端是否正在传输响应来更改基于Flask的API的行为

Js的查询结果可以在PC Chrome上显示,但不能在Android Chrome、OPERA和EDGE上显示,而两者都可以在Firefox上运行

如何在Python中自动创建数字文件夹和正在进行的文件夹?

Pandas:将值从一列移动到适当的列