[英]check if one dataframe values match another dataframe column then set value in dataframe column
[英]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.