簡體   English   中英

如果兩個單元格值與 pandas 中的另一個較小子集 dataframe 匹配,則使用 True 填充新的 dataframe 列

[英]Populate a new dataframe column with True if two cell values match another smaller subset dataframe in pandas

如果兩個單元格值與 pandas 中另一個較小的子集 dataframe 匹配,我希望用 True 填充新的 Z6A8064B5DF4794555500553C47C55057DZ 列,否則值為 False。

例如,這是我正在構建的原始 output dataframe。

ID    Type
1     A
2     B
3     A
4     A
5     C
6     A
7     D
8     A
9     B
10    A

以及根據某些標准選擇的 dataframe 的較小子集:

ID    Type
1     A
3     A
4     A
5     C
7     D
10    A

我想要完成的是當 output dataframe 中的 ID 和類型與較小的子集數據集匹配時,我想填充一個名為“結果”的新列並且值等於 True。 否則,值等於 False。

ID    Type    Result
1     A       True
2     B       False
3     A       True
4     A       True
5     C       True
6     A       False
7     D       True
8     A       False
9     B       False
10    A       True

您可以使用以原始 dataframe 為基礎的左合並.merge() 2 個數據幀,並打開indicator=參數以顯示合並結果。 然后將出現在兩個數據框中的行的合並結果更改為True ,否則更改為False

df_out = df1.merge(df2, on=['ID', 'Type'] , how='left', indicator='Result')
df_out['Result'] = (df_out['Result'] == 'both')

說明

開啟indicator=參數后,Pandas 將顯示當前行來自哪個 dataframe 的合並結果(就 , bothleft_only right_only

df_out = df1.merge(df2, on=['ID', 'Type'] , how='left', indicator='Result')

print(df_out)


   ID Type     Result
0   1    A       both
1   2    B  left_only
2   3    A       both
3   4    A       both
4   5    C       both
5   6    A  left_only
6   7    D       both
7   8    A  left_only
8   9    B  left_only
9  10    A       both

然后,我們通過 boolean 掩碼將both和其他轉換為True / False ,如下所示:

df_out['Result'] = (df_out['Result'] == 'both')

print(df_out)



   ID Type  Result
0   1    A    True
1   2    B   False
2   3    A    True
3   4    A    True
4   5    C    True
5   6    A   False
6   7    D    True
7   8    A   False
8   9    B   False
9  10    A    True

暫無
暫無

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

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