繁体   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