如果在另一数据框的列中找到ID匹配,则更新数据框中的一列的值

我有两个数据框。第二数据帧是从第一数据帧派生的。我在第二个数据框中更新一列,然后将更新后的值放回第一个数据框中。我已经尝试过“合并”,但是它给了我两列后缀“ _x”和“ _y”

import pandas

lotQtyQueryForDF = pandas.read_sql_query(refreshQuery,conForInfo)
dataFrameOfLots = pandas.DataFrame(lotQtyQueryForDF,columns=['Customer','Stage','ProdType','Brand','ProdName','Size','Strength','Lot','PackedOn','Qty','Available'])

dataFrameOfLots['Available']=dataFrameOfLots["Available"].fillna(dataFrameOfLots['Qty'])
#inserting columns
dataFrameOfLots['QtyInTransaction']=0   
dataFrameOfLots['IndexCol'] = range(1, len(dataFrameOfLots) + 1)

dataFrameFiltered=dataFrameOfLots.query('Brand=="XYZ" & Customer=="ABC"')
dataFrameFiltered.loc[:,'Qty in transaction']=34
dataFrameFiltered2=dataFrameFiltered[['Qty in transaction','IndexCol']].copy()
dataFrameOfLots.merge(dataFrameFiltered2,on='IndexCol',how='outer')

输入数据集:

Customer Stage ProdType Brand ProdName Size Strength Lot PackedOn Qty Available

DEF      A       Bulk    YYY   Test    Test   Weak    1   20200101 10    5            

ABC      A       Bulk    XYZ   Test    Test   Weak    1   20200101 10    5            

GHI      A       Bulk    YTY   Test    Test   Weak    1   20200101 10    5            

ABC      B       RAW     XYZ   Test    Test   Weak    1   20200101 10    5            

实际输出:

Customer Stage ProdType Brand ProdName Size Strength Lot PackedOn Qty Available QtyInTransaction_x IndexCol QtyInTransaction_y

DEF      A       Bulk    YYY   Test    Test   Weak    1   20200101 10    5            0               1             0 

ABC      A       Bulk    XYZ   Test    Test   Weak    1   20200101 10    5            0               2             34 

GHI      A       Bulk    YTY   Test    Test   Weak    1   20200101 10    5            0               3             0 

ABC      B       RAW     XYZ   Test    Test   Weak    1   20200101 10    5            0               4             34

预期产量:

Customer Stage ProdType Brand ProdName Size Strength Lot PackedOn Qty Available IndexCol QtyInTransaction

DEF      A       Bulk    YYY   Test    Test   Weak    1   20200101 10    5           1             0 

ABC      A       Bulk    XYZ   Test    Test   Weak    1   20200101 10    5           2             34 

GHI      A       Bulk    YTY   Test    Test   Weak    1   20200101 10    5           3             0 

ABC      B       RAW     XYZ   Test    Test   Weak    1   20200101 10    5           4             34

查询是正确的方法吗?如何合并,以便仅显示一列?

谢谢

请在执行过滤器后尝试使用外部合并并删除不需要的行。下面的代码。

result=pd.merge(dataFrameOfLots, dataFrameFiltered, how='outer', on=['Customer', 'Stage', 'ProdType', 'Brand', 'ProdName', 'Size',
       'Strength', 'Lot', 'PackedOn', 'Qty', 'Available'],suffixes=('_x', '')).fillna(0)
result=result.loc[:,~result.columns.str.endswith('_x')]#drop unwanted columns

要么

result.drop(columns=['QtyInTransaction_x','IndexCol_x'], inplace=True)#drop unwanted columns

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果在另一数据框中找到其列值,则从数据框中删除该行

如果在另一个数据框列pandas中找到一列中的值,则返回值

根据在另一列中找到的数字将数据框列中的值相乘

如果在另一列(c)中找到另一列(b)中的值,则在第一列(a)中输入文本

如果在 R 数据框中找到匹配的文本,则向上移动列

在一列的数据框中找到相同的观测值,而在另一列中找到不同的观测值

如果在R的另一个列表中找到ID,则删除数据框的行

如果在另一个数据框中的一组列中存在匹配项,如何删除 Pandas 数据框中的行?

基于另一数据框列从一列中减去值

从同一数据框中另一列的值派生列

根据R中的另一数据框替换一列中的值

如何根据同一数据框中另一列的值替换数据框中的值?

在pyspark中检查另一数据框中的一列中的一列的值

根据同一数据框内另一列中的值替换数据框列中的值

如何获得匹配数据框中的一列的值与另一列

如何从同一数据框中查找另一列中包含唯一值的列值?

如何检查数据框中的一列是否与另一数据框中的一列完全相等

将一列与另一数据框列匹配并粘贴第二个数据中的值 - Python

如果在熊猫的给定列中找到字符串匹配,则获取另一列的单元格值

如果前两列都匹配,则将数据框的一列中的值添加到另一个数据框的新列中

如果在另一个数据框中匹配,则更改一个数据框中的值

Python Pandas:将一列的值检查为另一数据框的列

根据同一数据框中另一列的值对2列的值进行计数或求和

检查一个数据框值是否与另一数据框列匹配,然后在数据框列中设置值

检查一个数据框中的一列中的值是否在另一数据框中的两列中的值之间的范围内

如果在另一列中找到特定值1次或多次,如何保留列ID的所有实例

使用同一数据框中另一列的int作为索引获取列中的列表值

如果另一列中的值彼此相邻,则求和数据框中的列值

将一个数据框的一列的每个值与另一个数据框的一列的值匹配(如果后者存在)