为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas 将列值与同一数据帧中的多个列相匹配

Pandas 将列值与同一数据帧中的多个列相匹配

POPMUISE 2023-10-18 16:19:53
我有一个包含数千列的 Pandas Dataframe。Pandas Dataframe 的片段通过以下方式表示:    import numpy as np    import pandas as pd    DataFrame1=pd.DataFrame([ ['A1X1' , 'J1', 'Q4', 'ND', 'J1'],                              ['A1X2' , 'X1', '01', 'Q2', 'JK'],                              ['A1X3' , 'R6', 'R6', '01', 'A5'],                              ['A1X4' , 'J1', 'R6', 'A5', 'B6']],                            columns=['ID', 'SearchValue', 'Check 1', 'Check 2', 'Check 60000'])    DataFrame1.head(4)我有一个包含数千列的 Pandas Dataframe。Pandas Dataframe 的片段通过以下方式表示:    import numpy as np    import pandas as pd    DataFrame1=pd.DataFrame([ ['A1X1' , 'J1', 'Q4', 'ND', 'J1'],                              ['A1X2' , 'X1', '01', 'Q2', 'JK'],                              ['A1X3' , 'R6', 'R6', '01', 'A5'],                              ['A1X4' , 'J1', 'R6', 'A5', 'B6']],                            columns=['ID', 'SearchValue', 'Check 1', 'Check 2', 'Check 60000'])    DataFrame1.head(4)
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

# create a mask using isin and any

mask = DataFrame1[DataFrame1.columns[2:]].isin(DataFrame1['SearchValue']).any(1)

# use numpy.where to assign values

DataFrame1['FinalResult'] = np.where(mask, DataFrame1['SearchValue'], 'XX')


     ID SearchValue Check 1 Check 2 Check 60000 FinalResult

0  A1X1          J1      Q4      ND          J1          J1

1  A1X2          X1      01      Q2          JK          XX

2  A1X3          R6      R6      01          A5          R6

3  A1X4          J1      R6      A5          B6          XX


查看完整回答
反对 回复 2023-10-18
?
青春有我

TA贡献1784条经验 获得超8个赞

您想要搜索每行中的值:


mask = DataFrame1.filter(like='Check').eq(DataFrame1['SearchValue'], axis=0).any(1)


DataFrame1['FinalResult'] = DataFrame1['SerchValue'].where(mask, 'XX')

输出:


     ID SearchValue Check 1 Check 2 Check 60000 FinalResult

0  A1X1          J1      Q4      ND          J1          J1

1  A1X2          X1      01      Q2          JK          XX

2  A1X3          R6      R6      01          A5          R6

3  A1X4          J1      R6      A5          B6          XX


查看完整回答
反对 回复 2023-10-18
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

我会进入 numpy 世界并进行比较:


box = df.to_numpy()


box



array([['A1X1', 'J1', 'Q4', 'ND', 'J1'],

       ['A1X2', 'X1', '01', 'Q2', 'JK'],

       ['A1X3', 'R6', 'R6', '01', 'A5'],

       ['A1X4', 'J1', 'R6', 'A5', 'B6']], dtype=object)


compare = box[:, 1, np.newaxis] == box[:, 2:]

现在分配numpy where


df['Final Result'] = np.where(np.sum(compare, axis=1), box[:, 1], "XX")



    ID  SearchValue Check 1 Check 2 Check 60000 Final Result

0   A1X1    J1        Q4      ND      J1           J1

1   A1X2    X1        01      Q2      JK           XX

2   A1X3    R6        R6      01      A5           R6

3   A1X4    J1        R6      A5      B6           XX



查看完整回答
反对 回复 2023-10-18
  • 3 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信