我有一个名为“ common_numbers”的列表。此列表的数字(采用str格式)将与数据列中第4列中的某些数字匹配。例如:
common_numbers = ['512', '653', '950']
(example row in a data frame) df = expeditious, tree, www.stackflow.com, 512, asn
data frame example:
0 0,1,2,3,4
1 host,ip,FQDN,asn,asnOrgName
2 barracuda,208.92.204.42,barracuda.godsgarden.com,17359,exampleorgName
The commonality in common_numbers and the data frame in this example is 512. Thus, the value I want to retrieve is www.stackflow.com from the data frame.
I tried:
wanted_data = [] 如果我在common_values中: 打印(“找到匹配项。生成fqdn。”) 对于我在df_is_not中: wanted_data.append(df.loc [df [2] .isin(common_values)]) 打印(wanted_fqdn_data)
It returns:
Columns: [0, 1, 2, 3, 4]
Index: [], Empty DataFrame
我在做什么错?我怎样才能解决这个问题?非常感谢。通过上面给出的示例,我期望得到:
print(wanted_data)
>>>['www.stackflow.com']
答案 0 :(得分:1)
尝试一下
df1 = pd.DataFrame(['512', '653', '950'])
df2 = pd.DataFrame([['expeditious', 'tree', 'www.stackflow.com', '512', 'asn'],
['barracuda','208.92.204.42','barracuda.godsgarden.com','17359','exampleorgName']],
columns=['c1','c2','c3','c4','c5'])
df3 = df2.merge(df1, left_on=['c4'], right_on=[0], how='inner', left_index=False)[['c3']]
df3
结果将是
c3
0 www.stackflow.com
答案 1 :(得分:0)
您有一个正确的想法,在这种情况下,确实不需要循环。
如果您最终只想提取列表中第四列所在的每一行的第三列,则可以执行以下操作:
df = df[df[3].isin(common_numbers)]
wanted_data = list(df[2])
希望这能回答您的问题。