我有2个数据帧:
# dataframe 1
data = {'Name':['PINO','PALO','TNCO' ,'TNTO','CUCO' ,'FIGO','ONGF','LABO'],
'Id' :[ 10 , 9 ,np.nan , 14 , 3 ,np.nan, 7 ,np.nan]}
df1 = pd.DataFrame(data)
以及
# dataframe 2
convert_table = {'XXX': ['ALLO','BELO','CACO','CUCO','DADO','FIGO','FIGO','ONGF','PALO','PALO','PINO','TNCO','TNCO','TNCO','TNTO']}
df2 = pd.DataFrame(convert_table)
我的目标是确定遵循以下条件的df2['XXX']
元素的索引:
df1['Name']
我通过使用以下代码行实现了我的目标:
nan_names = df1['Name'][df1['Id'].isnull()]
df3 = pd.DataFrame()
for name in nan_names:
index = df2[df2['XXX']==name].index.tolist()
if index:
dic = {'name':[name] , 'index':[index]}
df3 = pd.concat([df3,pd.DataFrame(dic)], ignore_index=True)
然而,我想知道是否有一个更有效和优雅的方式来实现我的目标。你知道吗
结果应该是这样的:
index name
0 [11, 12, 13] TNCO
1 [5, 6] FIGO
注意:如果找不到名称,则不需要存储任何信息。你知道吗
我想你可以用^{} 和^{} 和
apply
list
:您正在寻找方法
isin
:这将返回:
从这里开始,只需要格式化:
这将返回:
其思想是重置索引,使其成为一列(名为
index
)。按名称分组并应用list
函数将返回每个名称的原始索引列表。你知道吗再次调用
reset_index
将返回您要查找的结果。你知道吗编辑
将所有内容组合成一行,这将是输出:
相关问题 更多 >
编程相关推荐