我有這個代碼:
test = {"number": ['1555','1666','1777', '1888'],
"order_amount": ['100.00','200.00','-200.00', '300.00'],
"number_of_refund": ['','','1666', '']
}
df = pd.DataFrame(test)
它回傳以下資料框:
number order_amount number_of_refund
0 1555 100.00
1 1666 200.00
2 1777 -200.00 1666
3 1888 300.00
如果訂單號被退還,洗掉該行的最佳解決方案是什么?我想洗掉訂單行和退款行。
邏輯if df['number'].value is in df['number_of_refund']和數量df['number'].value是相反的df['number_of_refund']行。
所以這種情況下的結果應該是:
number order_amount number_of_refund
0 1555 100.00
1 1888 300.00
uj5u.com熱心網友回復:
您可以使用帶有兩個掩碼的布爾索引:
# is the row a refund?
m1 = df['number_of_refund'].ne('')
# is the number order matching a refund?
m2 = df['number'].isin(df.loc[m1, 'number_of_refund'])
# keep rows that do not match any of the above
out = df[~(m1|m2)]
輸出:
number order_amount number_of_refund
0 1555 100.0
3 1888 300.0
部分退款:
df['order_amount'] = pd.to_numeric(df['order_amount'], errors='coerce')
# is the row a refund?
m1 = df['number_of_refund'].ne('')
# get mapping of refunds
s = df[m1].set_index('number_of_refund')['order_amount']
# update amounts
df['order_amount'] = df['number'].map(s).fillna(0)
# find null values
m2 = df['order_amount'].eq(0)
# keep rows that do not match any mask
df = df[~(m1|m2)]
輸出:
number order_amount number_of_refund
0 1555 100.0
1 1666 100.0
3 1888 300.0
部分退款的輸入:
test = {"number": ['1555','1666','1777', '1888'],
"order_amount": ['100.00','200.00','-100.00', '300.00'],
"number_of_refund": ['','','1666', '']
}
df = pd.DataFrame(test)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/505728.html
下一篇:具有兩個列識別符號的滾動平均值
