簡體   English   中英

Pandas 將多個列與數據框中的特定列進行比較

[英]Pandas compare multiple columns to a specific column in a dataframe

我有一個這樣的數據框:

Product_ID Store_1_qty Store_2_qty Store_3_qty
A          10          20          10
B          10          10          10
C          10          10          20

如果列 Store_2_qty、Store_3_qty 都等於 Store_1_qty,我想再添加一列顯示“true”或“false”。 但是有時會添加額外的列,如 Store_4_qty、Store_5_qty,為此我需要再次將所有列與 Store_1_qty 進行比較

我試過這個,但它在最后一列中返回所有 False

result['match'] = np.where(result.iloc[:, 1] == result.iloc[:, :1].all(1), 'True', 'False')

如果Product_ID是列使用DataFrame.eq ,您也可以將所有列與第一個Store列進行比較:

result['match'] = (result.iloc[:, 1:].eq(result.iloc[:, 1], axis=0)).all(1) 

如果我理解正確,您需要做的就是測試 df 條目的唯一性:

# Assuming Product_ID is NOT your index:
df['match'] = df.iloc[:,2:].nunique(axis=1) == 1

# If Product_ID is your index it simplifies to:
df['match'] = df.nunique(axis=1) == 1

結果:

  Product_ID  Store_1_qty  Store_2_qty  Store_3_qty  match
0          A           10           20           10  False
1          B           10           10           10   True
2          C           10           10           20  False

只是一個嘗試。 @jezrael 的解決方案更好

df['match'] = df[['Store_2_qty', 'Store_3_qty']].eq(df['Store_1_qty'],axis=0).all(1)

輸出:

  Product_ID  Store_1_qty  Store_2_qty  Store_3_qty  match
0          A           10           20           10  False
1          B           10           10           10   True
2          C           10           10           20  False

暫無
暫無

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

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