如何根据列标题匹配在数据框中获取值?

时间:2019-04-10 15:00:13

标签: python

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

0 个答案:

没有答案