df1,列A,包含一个我需要与df2中的列标题匹配的数字列表。
一旦我在df2中找到了那些匹配的列标题,就需要读取该列并找到该列的所有“ X”,然后还要在行/行中附加“所有者”和“宠物”值,其中“ X”。
data1 = {"A": ['1234', '5678', '91011', '121314']}
data2 = {"Owner" : ['CS', 'CS', 'EN', 'EN'],
"Pet" : ['Cheetoh', 'Pete', 'Callie', 'Minnie'],
"1234": ['NO', 'X', 'NO', 'NO'],
"5678" : ['NO', 'X', 'X', 'NO'],
"91011": ['NO', 'NO', 'NO', 'X'],
"121314" : ['X', 'NO', 'NO', 'NO'] }
我列出了df2的列标题列表,以便可以将df1.A与df2的列标题列表进行比较。
#need col headers in df2 to compare with df1.A values
cols2 = df2.columns.values
print(cols2)
['Owner' 'Pet' '1234' '5678' '91011' '121314']
我需要选择列标题“ 1234”,“ 5678”,“ 91011”,“ 121314”来搜索“ X”,但是我稍微简化了此示例以仅查看df2的列“ 1234”表示“ X”。
我可以获取“ Pet”和“ Owner”名称所在位置的逻辑值,但是很难获得实际值,并且如果“ X”在列中出现多次,则很难编写额外的行。
#find df1.A in col headers of df2 and look for "X" (non-empty for regular data set)
keep = ['X']
bool_list = df2['1234'].str.contains('|'.join(keep), na = False)
df1['Pet'] = bool_list
df1
这是我当前的结果:
A Pet
1234 False
5678 True
91011 False
121314 False
我需要输出看起来像这样:
A Pet Owner
1234 NaN NaN
5678 Pete CS
5678 Callie EN
91011 NaN NaN
121314 NaN NaN