首页 > 解决方案 > 在数据框中搜索多个子值

问题描述

我有一个数据框 df['Source']

0  171.180.124.101 171.123.116.77 168.241.122.156 171.161.223.100
1                                       171.180.134.102
2                                       171.180.123.103
3                                       171.180.122.104
4                        171.180.111.104 171.161.223.100
5                        171.180.111.134 171.123.116.77

我需要在“源”数据框中搜索多个 IP。

输入值 = 171.123.116.77、171.161.223.100

根据我的输入,我期望的输出是:(因为最匹配的值在第一行)

0      True
1     False
2     False
3     False
4     False
5     False
Name: Source, dtype: bool

用户输入值 = 171.123.116.77,171.161.223.100

我的尝试:

key_words = df['Source']

val1,val2,val3 = values.split(',')
sample = key_words.str.contains(val1) & key_words.str.contains(val2) & key_words.str.contains(val3) & key_words.str.contains(val4)

我在这里面临的限制是分配的变量,值字段可能会因用户输入而异,如何避免这种情况,有没有更好的方法/方法?

标签: pythonpandaslist

解决方案


您可以使用列表理解。

import pandas as pd
a = [
"171.180.124.101 171.123.116.77 168.241.122.156 171.161.223.100"
,                                     "171.180.134.102"
,                                     "171.180.123.103"
,                                     "171.180.122.104"
,                      "171.180.111.104 171.161.223.100"
,                      "171.180.111.134 171.123.116.77"
]
s = pd.Series(a)
vals = ["171.123.116.77", "171.161.223.100"]
print(pd.DataFrame([s.str.contains(val) for val in vals]).all(0))
# 0     True
# 1    False
# 2    False
# 3    False
# 4    False
# 5    False
# dtype: bool

推荐阅读