首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫在相同的数据框架中比较列和基于比较的替换值

熊猫在相同的数据框架中比较列和基于比较的替换值
EN

Stack Overflow用户
提问于 2022-02-17 09:21:28
回答 2查看 464关注 0票数 0

我有一个excel表,它由6000多行组成。有两列,"IP地址CMDB“,包含IP地址和另一列称为"IP地址LM”。我试图在"IP地址LM“中查找属于"IP地址CMDB”的IP地址,如果"IP地址LM“包含该IP地址,则返回ABCD。我不能附上excel表格,所以我附上了屏幕截图。

代码语言:javascript
复制
for col in report:
    if col == "IP Address CMDB":
        col_num = report[col]
        for num in col_num:
            if report["IP Address LM"].str.contains(num):
                print("ABCD")
<ipython-input-13-40cfae2bd937>:5: UserWarning: This pattern has match groups. To actually get the groups, use str.extract.
  if report["IP Address LM"].str.contains(num):
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-13-40cfae2bd937> in <module>
      3         col_num = report[col]
      4         for num in col_num:
----> 5             if report["IP Address LM"].str.contains(num):
      6                 print("ABCD")
      7 

c:\users\rohit verma\appdata\local\programs\python\python39\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
   1535     @final
   1536     def __nonzero__(self):
-> 1537         raise ValueError(
   1538             f"The truth value of a {type(self).__name__} is ambiguous. "
   1539             "Use a.empty, a.bool(), a.item(), a.any() or a.all()."

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-17 09:35:51

您只需使用以下代码来检查IP地址LM是否包含属于IP地址CMDB的内容

代码语言:javascript
复制
checkColumn = []
for index, row in df.iterrows():
  Ip = row["IP Address LM"]
  toCheck = row["IP Address CMDB"]
  if toCheck in Ip:
    checkColumn.append("ABCD")
  else:
    checkColumn.append(None)
df["check"] = checkColumn

解释

iterrows()函数循环遍历数据的所有行。然后,使用逻辑语句(如toCheck in Ip ),我们试图检查上述列中是否存在该值。如果不是,则返回None,否则,按请求返回ABCD

票数 0
EN

Stack Overflow用户

发布于 2022-02-17 10:07:34

作为源DataFrame (report),我创建了:

代码语言:javascript
复制
                        IP Address CMDB IP Address LM
0                   10.1.0.36,10.1.53.1     10.1.0.36
1                            10.1.11.21    10.1.11.21
2  10.1.148.20,192.168.128.3,10.1.5.130    10.1.5.130
3                            10.1.5.100    10.1.5.140
4                            10.1.6.120    10.1.6.140

要标识IP地址CMDB包含IP地址LM的行,可以运行以下命令:

代码语言:javascript
复制
report.apply(lambda row: row['IP Address LM'] in row['IP Address CMDB'], axis=1)

详细信息:

  1. report.apply -将给定的lambda函数应用于每个(由于axis=1 parameter).
  2. row['IP Address LM'] in row['IP Address CMDB'] ),从当前行的两列创建临时字符列表,并检查左列表是否包含在右边的列表中。返回的值
  3. 实际上回答了您的问题( IP地址CMDB包含IP地址LM)。

结果是:

代码语言:javascript
复制
0     True
1     True
2     True
3    False
4    False
dtype: bool

如您所见,前3行中的IP地址CMDB包含来自当前行的IP地址LM。

如果您想做更多的事情,那么编写您自己的函数,包括您的操作,返回当前行的一些结果,并用这个函数替换lambda函数。

关于代码的注意事项: str.contains可以用于检查列的元素是否包含固定的值,但实际上只希望检查当前行中的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71155363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档