我的目标是将DataFrame行与2D数组列表中的每个项目进行比较。
这是我的清单=我的清单
1 2000
2 2000a
3 2000b
这是我的数据框= df
RPN Source city
1 netflix baltimore
1 netflix baltimore
2 hulu orlando
4 hulu houston
如上所述,我想从一个列表中创建一个新列,该列将DataFrame中的每个RPN与mylist的第一个位置进行比较。如果RPN在我的列表中,请使用与其关联的数组的第二个位置,并将其附加到要加入数据框的列表中。如果找不到,请使用RPN。
期望的输出
RPN Source city npi
1 netflix baltimore 2000
1 netflix baltimore 2000
2 hulu orlando 2000a
4 hulu houston 4
这是我下面的代码,它可以工作,但是我只为每条记录获取RPN,而不与mylist中与该RPN相关的NPI
#Seperates Portico from Facets, FEP, Nasco, ETC
portico = df[df['SOURCE'] == 'PORTICO']
comparelist = []
#creates a list of RPN and NPI
mylist = portico[['RPN','NPI']].values.tolist()
for index,x in df.iterrows():
RPN = x['RPN']
for a in mylist:
if RPN in a:
comparelist.append(a)
else:
comparelist.append(RPN)
break
df = df.drop(columns = ['NPI'])
df['NPI'] = comparelist
当前输出
RPN Source city npi
1 netflix baltimore 1
1 netflix baltimore 1
2 hulu orlando 2
4 hulu houston 4
最佳答案
如果您不介意为mylist
创建另一个数据帧,则一种方法可能是使用merge
:
mylist_df = pd.DataFrame(mylist, columns=['RPN', 'npi']) # creating other df
df = df.merge(mylist_df, how='left', on='RPN')
df['npi'].fillna(df['RPN'], inplace=True) # fill na values with RPN of same dataframe