如何根据与熊猫匹配的条件从数据框中获取数据?

时间:2019-12-10 15:35:58

标签: python pandas

我有一个名为“ 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']

2 个答案:

答案 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])

希望这能回答您的问题。