首页 > 解决方案 > 在另一列中搜索列值并将找到的行的下一列中的值分配给另一列

问题描述

我正在使用 Pandas 并试图用另一列中的值填充一列,其中另一列包含与特定列中相同的值。

例子:

>>> df = pd.DataFrame({'StringToCheck': ['10T','125T', '',''],
                   'FromNumber' :['','','',''],
                   'ToNumber' : ['','','',''],
                   'CheckStringHere': ['AAA_ER', 'FGGR_DBC', '10T', '125T'],
                   'AssociatedValue1': ['','','56','16'],
                   'AssociatedValue2': ['','','58','24']})
>>> df
  StringToCheck FromNumber ToNumber CheckStringHere AssociatedValue1 AssociatedValue2
0           10T                              AAA_ER                                  
1          125T                            FGGR_DBC                                  
2                                               10T               56               58
3                                              125T               16               24

StringToCheck我想在列内搜索每个值,并将找到的行上CheckStringHere的值分配给列,但在值所在的行上。AssociatedValue1FromNumberStringToCheck

我努力了

>>> df['FromNumber'] = df[df['CheckStringHere'].isin(df['StringToCheck'])]['AssociatedValue1']
>>> df
  StringToCheck FromNumber ToNumber CheckStringHere AssociatedValue1 AssociatedValue2
0           10T        NaN                   AAA_ER                                  
1          125T        NaN                 FGGR_DBC                                  
2                       56                      10T               56               58
3                       16                     125T               16               24

如您所见,值已添加到FromNumber列中,但是在从中StringToCheck找到值的行中CheckStringHere,我需要

  StringToCheck FromNumber ToNumber CheckStringHere AssociatedValue1 AssociatedValue2
0           10T        56                    AAA_ER                                  
1          125T        16                  FGGR_DBC                                  
2                                               10T               56               58
3                                              125T               16               24

接下来,如果可以同时从AssociatedValue2ToNumber列中获取值,那将是一种真正的享受。

PS
我不知道这个问题有什么问题,我研究并尝试了很多解决方案,解释了我的方法以及什么不起作用。反对这样的问题绝对是错误的。

标签: pythonpandas

解决方案


您可以尝试从列创建字典['CheckStringHere','AssociatedValue1']并替换列中的值StringToCheck

d = dict(df[['CheckStringHere','AssociatedValue1']].to_numpy())
df['FromNumber'] = df['StringToCheck'].replace(d)
#or df['FromNumber'] = df['StringToCheck'].map(d).fillna(df['FromNumber'])

print(df)
  StringToCheck FromNumber ToNumber CheckStringHere AssociatedValue1  \
0           10T         56                   AAA_ER                    
1          125T         16                 FGGR_DBC                    
2                                               10T               56   
3                                              125T               16   

  AssociatedValue2  
0                   
1                   
2               58  
3               24  

推荐阅读