簡體   English   中英

如果在另一列 dataframe 中找到 ID 匹配,則更新 dataframe 中一列的值

[英]Updating value of one column in dataframe if ID match found in column of another dataframe

我有兩個數據框。 第二個 dataframe 是從第一個 dataframe 派生的。 我更新了第二個 dataframe 中的一列,然后我想將更新后的值放回第一個 dataframe 中。 我試過“合並”,但它給了我兩列后綴為“_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            

實際 output:

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

預期 output:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM