簡體   English   中英

在Pandas數據框中查找具有相同列值的行

[英]Finding rows with same column values in pandas dataframe

我有兩個具有不同列大小的數據框,其中四個列在兩個數據框中可以具有相同的值。 我想在df1中創建一個新列,如果df2中有一行與df1中的行具有相同值的列'A','B','C'和'D',則該列的值為1 。 如果沒有這樣的行,我希望該值為0。行“ E”和“ F”對於檢查值並不重要。

是否有一個熊貓函數可以做到這一點,或者我必須在循環中做到這一點。

例如:

df1 =
A    B    C    D    E    F
1    1    20   20   3    2
1    1    12   14   1    3
2    1    13   43   4    3
2    2    12   34   1    4

df2 =
A    B    C    D    E    
1    3    12   14   2    
1    1    20   20   4   
2    2    21   31   5    
2    2    12   34   8    

預期輸出:

df1 =
A    B    C    D    E    F    Target
1    1    20   20   3    2    1
1    1    12   14   1    3    0
2    1    13   43   4    3    0
2    2    12   34   1    4    1

這很簡單。 如果檢查兩個DataFrame是否相等,則檢查每個元素是否等於各自的元素。

col_list = ['A', 'B', 'C', 'D']
idx = (df1.loc[:,  col_list] == df2.loc[:,  col_list]).all(axis=1)

df1['new_row'] = idx.astype(int)

我認為您需要merge left join和參數indicator=True ,然后將_merge列與eq (與==相同)進行比較,最后通過astype將布爾值TrueFalse轉換為10

cols = list('ABCD')
df1['Target'] = pd.merge(df1[cols], 
                      df2[cols], how='left', indicator=True)['_merge'].eq('both').astype(int)
print (df1)

   A  B   C   D  E  F  Target
0  1  1  20  20  3  2       1
1  1  1  12  14  1  3       0
2  2  1  13  43  4  3       0
3  2  2  12  34  1  4       1

詳情:

print (pd.merge(df1[cols], df2[cols], how='left', indicator=True))
   A  B   C   D     _merge
0  1  1  20  20       both
1  1  1  12  14  left_only
2  2  1  13  43  left_only
3  2  2  12  34       both

您可以為此使用邏輯運算符。 您可以看一下在Pandas中用於布爾索引的Logic運算符, 或在Pandas中用於Element-wise邏輯或的 邏輯運算符

但是您的規范不足以提供解決方案草圖,因為我不知道df1中的行應如何與df2一起使用。 是行數是否相同,並且df1中的每一行都應具有同一行中A,B,C和D的df2中具有布爾值的列?

暫無
暫無

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

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