当前位置: 首页 > 知识库问答 >
问题:

从不同的数据帧更新/替换熊猫

端木兴国
2023-03-14

我有两个数据帧:df1和df2。df1有列['UserId'、'company'、'deg'],有100个观察值。df2有列['UserId','deg',],有10个观察值。df1和df2中的索引与“userId”完全匹配。

我想用df2中的更新df1。df2中的“UserId”列是df1中“UserId”列的子集……因此,没有任何附加内容。仅基于“userId”(和/或普通索引)。

df1

,'UserId','Company','deg'
6,'john21','ibm','bs'
12,'mary33','cisco','ms'
16,'smith11','intel','none'
20,'lucy55','intel','bs'
33,'tanya32','fb','ms'
39,'ssri44','google','none'
45,'har43','CDs','none'

df2

,'UserId','deg'
16,'smith11','BS'
39,'ssri44','MS'
45,'har43','MS'

现在,我想使用df2中的信息来更新df1。如您所见,索引值和userIds与df1中的完全匹配。

有什么建议吗?

谢谢

共有1个答案

贡斌
2023-03-14

您可以首先将替换为NaN,然后使用fillnadf1中的值更新为df2

df1.replace({"'none'": np.nan}, inplace=True)
#or omit '', for me works uncomment version
#df1.replace({"none": np.nan}, inplace=True)

print df1.fillna(df2)

     'UserId' 'Company' 'deg'
6    'john21'     'ibm'  'bs'
12   'mary33'   'cisco'  'ms'
16  'smith11'   'intel'  'BS'
20   'lucy55'   'intel'  'bs'
33  'tanya32'      'fb'  'ms'
39   'ssri44'  'google'  'MS'
45    'har43'     'CDs'  'MS'

另一个带有更新的解决方案

df1.replace({"'none'": np.nan}, inplace=True)

df1.update(df2)
print df1
     'UserId' 'Company' 'deg'
6    'john21'     'ibm'  'bs'
12   'mary33'   'cisco'  'ms'
16  'smith11'   'intel'  'BS'
20   'lucy55'   'intel'  'bs'
33  'tanya32'      'fb'  'ms'
39   'ssri44'  'google'  'MS'
45    'har43'     'CDs'  'MS'

如果要通过df1更新df2,请使用merge

print pd.merge(df2,df1,left_index=True,right_index=True,how='left', on=["'UserId'","'deg'"])
     'UserId' 'deg' 'Company'
16  'smith11'  'BS'   'intel'
39   'ssri44'  'MS'  'google'
45    'har43'  'MS'     'CDs'

 类似资料:
  • 我想更改我的熊猫数据框架中的一个值,我想我误解了索引的工作方式。 我得到输出 我想将df中的值0.665873更改为1。我试过了 但我得到了错误 我试图用示例数据帧复制该问题,但无济于事。 我认为问题在于,当我使用实际数据时,我得到了一系列的输出,但当我使用实践数据时,得到了一个浮点。为什么我得到的是这个系列而不是浮点0.665873?

  • 我肯定错过了一些简单的东西。尝试合并熊猫中的两个数据帧,它们的列名基本相同,但右边的数据帧有一些左边没有的列,反之亦然。 我已尝试使用外部联接进行联接: 但这会产生: 我还指定了一个要连接的列(例如,on="id"),但这会重复所有列,除了"id",如attr_1_x、attr_1_y,这并不理想。我还传递了整个列列表(有很多)到on: 其产生: 我错过了什么?我想得到一个附加了所有行的df,并且

  • 我正在尝试制作一个数据帧,以便可以轻松地将其发送到CSV,否则我必须手动执行此过程。。 我希望这是我的最终输出。每个人都有一个月和年的组合,从2014年1月1日开始,一直到2016年1月12日: 到目前为止的代码: 当我尝试循环创建数据帧时,它要么不工作,要么出现索引错误(因为不匹配列表),我不知所措。 我已经做了一点很好的搜索,并找到了以下一些类似的链接,但我不能反向工程的工作,以适应我的情况。

  • 拿着字典: 我如何把这个字典变成一个数据框,其中的值是列?即。我想要一个数据框显示: 这种形式似乎根本得不到! 谢谢 这是一个不同的问题,另一个问题只是问如何将字典的值放入数据帧,我问的是如何获得我概述的特定形式

  • 我试图将pandas数据帧从宽到长,但我找不到一个好方法。有没有建议通过熊猫来实现这一点? 预期结果:

  • 我试图基于同一数据帧的另一行向数据帧添加列。我想查找第一列值等于第5列中的值的行,并将第2、3和4列附加到dataframe,如下所示 我尝试创建另一个表来合并以各种组合,但没有运气。