当Pandas数据帧包含nan时,用“新信息”更新Pandas数据帧

2024-04-30 01:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

用“新信息”更新Pandas数据帧

我想做的是构建一个执行以下操作的函数(伪代码):

def update(original_information, new_information):
    ... stuff ...
    return updated_information

上面的输入和输出都是Pandas数据帧,它们都可以包含许多nan。在

原始信息的示例

^{pr2}$

新信息的一个例子

import pandas as pd
columns = ['edgar', 'morningstar', 'yahoo']
companies = [{'morningstar': 'AAPL', 'yahoo': 'AAPL'}, {'morningstar': 'XPAR:SGO', 'yahoo': 'SGO.PA'}]
new_information = pd.DataFrame(companies, columns=columns).sort_values('yahoo').reset_index(drop=True)

   edgar  morningstar  yahoo
0  NaN    AAPL         AAPL
1  NaN    XPAR:SGO     SGO.PA

理想情况下,我的更新功能可以完成三件事:

  1. 在单元格(1,晨星)中,将'XYZ'更新为'XPAR:SGO公司'自从'XPAR:SGO公司'是较新的信息
  2. 在单元格(0,晨星)中,显示“AAPL”,因为原始信息是“NaN”
  3. 在单元格(0,edgar)中,保留“000320192”,因为该单元格没有新信息

换句话说,我希望更新的_信息如下所示:

   edgar        morningstar  yahoo
0  00000320193  AAPL         AAPL
1  NaN          XPAR:SGO     SGO.PA

然而,我还没弄明白怎么做

我所拥有的是:

def update(original_information, new_information):
    result = pd.concat([original_information, new_information], ignore_index=True)
    result = result.drop_duplicates(subset='yahoo', keep='last').sort_values('yahoo').reset_index(drop=True)
    return result

返回:

   edgar  morningstar  yahoo
0  NaN    AAPL         AAPL
1  NaN    XPAR:SGO     SGO.PA

哪个。。。在

  1. 已成功将“XYZ”替换为XPAR:SGO公司'在牢房(1,晨星)

  2. 已成功使用“AAPL”更新单元格(0,晨星)

  3. 但不幸的是删除单元格(0,edgar)中的“000320192”,而不是保留它

有什么建议吗?在


Tags: 信息newinformationresultnanyahoopdoriginal