【问题标题】:getting final column after comparing 4 columns using np.where()使用 np.where() 比较 4 列后得到最后一列
【发布时间】:2022-01-12 18:52:52
【问题描述】:

使用 np.where 我能够获得 4 列 match1、match2、match3 和 match4。必须根据匹配 1、match2、match3 和 match4 的值更新最后一列 MATCHED。如果所有 4 列都是肯定的,那么我如果 4 个中有 3 个是“是”,则必须将 MATCHED 更新为“是”,那么“是”也将被更新。否则,否。


final_data = final_data.copy()
final_data['Match1'] = np.where(final_data['PROCESSOR_sub_column'] == final_data['PROCESSOR_Title'] , 'Yes', 'No')
final_data['Match2'] = np.where( final_data['RAM'] == final_data['RAM_Title'] , 'Yes', 'No')
final_data['Match3'] = np.where( final_data['Storage'] == final_data['STORAGE_Title'] , 'Yes', 'No')
final_data['Match4'] = np.where( final_data['Storage Type'] == final_data['STORAGE_TYPE_Title'] , 'Yes', 'No')

 if (final_data['Match1']&final_data['Match2']&final_data['Match3']&final_data['Match4'] == 'Yes'):

 final_data[Matched] = 'Yes'

将已生成的数据附加为屏幕截图data looks like this

我也尝试使用 np.where() 直接获取 Matched 列,但我没有成功同时检查四个条件。我也不知道在使用 4 个条件时我应该在 np.where(,x,y) 中作为 X.y 传递。

抱歉,如果这个问题是重复的,我已尽力阅读所有以前有关相关主题的帖子。

【问题讨论】:

  • @TimRoberts 你能不能给点建议。我决定做 1) 连接 4 列 2) 用三次是和 4 次是定义 dict。 3)在连接列上映射字典,然后创建新的最终列。但我不知道我必须在 dict 中写什么

标签: python python-3.x pandas dataframe numpy


【解决方案1】:

您可以比较 Yes 的所有 4 列,然后按每行的总和计算 Trues,并比较 3 是否大于或等于 Series.ge

mask = df[['Match1','Match2','Match3','Match4']].eq('Yes').sum(axis=1).ge(3)
final_data['Matched'] = np.where(mask, 'Yes', 'No')

另一个没有帮助列的解决方案比较过滤的数据帧:

np.random.seed(2022)

c=['PROCESSOR_sub_column','RAM','Storage','Storage Type','PROCESSOR_Title',
   'RAM_Title','STORAGE_Title','STORAGE_TYPE_Title']
final_data = pd.DataFrame(np.random.randint(2, size=(10,8)), columns=c)

df1 = final_data[['PROCESSOR_sub_column','RAM','Storage','Storage Type']]
df2 = final_data[['PROCESSOR_Title','RAM_Title','STORAGE_Title','STORAGE_TYPE_Title']]
mask = df1.eq(df2.to_numpy()).sum(axis=1).ge(3)

final_data['Matched'] = np.where(mask, 'Yes', 'No')
print (final_data)
   PROCESSOR_sub_column  RAM  Storage  Storage Type  PROCESSOR_Title  \
0                     1    0        1             0                1   
1                     0    0        0             0                1   
2                     1    1        0             0                0   
3                     0    0        0             1                0   
4                     0    1        0             0                1   
5                     1    1        1             1                0   
6                     0    1        0             1                1   
7                     0    1        1             0                0   
8                     1    1        1             1                1   
9                     1    1        0             0                0   

   RAM_Title  STORAGE_Title  STORAGE_TYPE_Title Matched  
0          1              0                   1      No  
1          1              1                   1      No  
2          1              0                   1      No  
3          0              0                   1     Yes  
4          1              1                   1      No  
5          0              0                   0      No  
6          0              0                   0      No  
7          1              0                   1      No  
8          1              0                   1     Yes  
9          0              1                   0      No  

【讨论】:

  • 非常感谢。谢谢谢谢你...谢谢一吨..axis = 1 用于列但.ge 是什么?如果你能解释一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多