当前位置: 首页 > 面试题库 >

Pandas(Python)-使用条件从另一个更新数据框的列

通建安
2023-03-14
问题内容

我遇到问题,找到了解决方案,但我觉得这是错误的方法。也许,有一种更“规范”的方式来做到这一点。

问题

我有两个要合并的数据框,而没有多余的列,也没有擦除现有的信息。范例:

现有数据框(df)

   A  A2  B
0  1   4  0
1  2   5  1

要合并的数据框(df2)

   A  A2  B
0  1   4  2
1  3   5  2

我想更新dfdf2是否列“A”和“A2”相对应。结果将是(:

   A  A2    B
0  1   4  2.0 <= Update value ONLY
1  2   5  1.0

这是我的解决方案,但我认为这不是一个很好的解决方案

import pandas as pd

df = pd.DataFrame([[1,4,0],[2,5,1]],columns=['A','A2','B'])

df2 = pd.DataFrame([[1,4,2],[3,5,2]],columns=['A','A2','B'])

df = df.merge(df2,on=['A', 'A2'],how='left')
df['B_y'].fillna(0, inplace=True)
df['B'] = df['B_x']+df['B_y']
df = df.drop(['B_x','B_y'], axis=1)
print(df)

有谁有更好的方法吗?谢谢 !


问题答案:

是的,无需合并即可完成:

rows = (df[['A','A2']] == df2[['A','A2']]).all(axis=1)
df.loc[rows,'B'] = df2.loc[rows,'B']


 类似资料:
  • 如何使用Pandas更新/组合/合并数据帧(df1)和来自另一个数据帧(df2)的值,其中df1有一个新列(col3)和来自df2的值。可乐2?换句话说,df1是当前月份的值,我希望df1也有一个来自df2的列,它是上个月的值。 任何关于这方面的见解都是值得赞赏的;非常感谢你。 DF1: DF2: 所需df:

  • 问题内容: 我有两个Spark数据框: 数据框A: 和数据框B: 数据框B可以包含来自数据框A的重复行,更新行和新行。我想在spark中编写操作,在其中可以创建一个新数据框,其中包含数据框A的行以及数据框B的更新行和新行。 我首先创建一个仅包含不可更新列的哈希列。这是唯一的ID。所以我们可以说,并可以改变值(可更新),但是是唯一的。我创建了一个哈希函数为: 现在,我想编写一些火花代码,基本上从B中

  • 问题内容: 假设我有一个像这样的数据框 原始表更加复杂,具有更多的列和行。 我想获得满足某些条件的第一行。例子: 获取A> 3的第一行(返回第2行) 获取A> 4 AND B> 3的第一行(返回第4行) 获取第一行,其中A> 3 AND(B> 3 OR C> 2)(返回第2行) 但是,如果没有满足特定条件的行,那么我想在我按A降序排序(或者其他情况下按B,C等排序)后得到第一行 获取A> 6的第一

  • 问题内容: 我要执行的操作类似于合并。例如,通过合并,我们得到一个数据帧,其中包含第一个AND第二个数据帧中存在的行。通过合并,我们得到一个数据帧,该数据帧在第一个或第二个数据帧中都存在。 我需要的是一个数据帧,其中包含第一个数据帧中存在的行而第二个数据帧中不存在的行?有快速而优雅的方法吗? 问题答案: 如下所示呢? 只要有一个非关键的通用命名列,就可以让在sufffexes上执行的工作(如果没有

  • 问题内容: 我有一个数据框 我有另一个数据框df2 我希望我的最终数据框看起来像: 即从一个数据框映射到另一个创建新列 问题答案: + 假设您的数据框已经在上排序,则第一次排序调用是多余的,在这种情况下,您可以删除它。 / 或者,显式创建映射。如果您以后要使用它,它将起作用。

  • 问题内容: 我有2个数据框,一个命名为USERS,另一个命名为EXCLUDE。他们两个都有一个名为“电子邮件”的字段。 基本上,我要删除EXERSUDE中包含电子邮件的USERS中的每一行。 我该怎么做? 问题答案: 您可以将和条件一起使用,通过以下方式反转布尔值: 另一个解决方案: