首页 > 编程问答 >如何合并行中的值,替换 pandas 中的 nan 值

如何合并行中的值,替换 pandas 中的 nan 值

时间:2024-07-26 09:51:15浏览次数:9  
标签:python pandas

我正在对数据框进行一些操作:

df

  Node        Interface      Speed      carrier    1-May  9-May   2-Jun    21-Jun  
  Server1      internet1     10          ATT       20     30     50      90    
  Server1      wan3.0        20          Comcast   NaN    NaN    NaN     100
  Server1      wan3.0        50          Comcast   30     40     40      NaN
  Server2      wan2          100         Sprint    90     70     NaN     NaN
  Server2      wan2          20          Sprint    NaN    NaN    88      70
  Server2      Internet2     40          Verizon   10     60     90      70

我需要按节点和接口合并数据框组中的行,将 nan 值替换为另一行,然后选择接口速度的最大值。

预期数据框应该是这样的:

df1

   Node        Interface      Speed      carrier    1-May  9-May   2-Jun    21-Jun  
  Server1      internet1     10          ATT       20      30      50       90    
  Server1      wan3.0        50          Comcast   30      40      40       100
  Server2      wan2          100         Sprint    90      70      88       70
  Server2      Internet2     40          Verizon   10      60      90       70

我尝试过这个:

df2=df.groupby(['Node','Interface','carrier']),agg({'Speep': 'max'}).reset_index()

df3=df.drop('Speed', axis=1)

df4=df3.ffill().drop_duplicates()

不太有效。有没有一种简单的方法来合并行、用其他行值替换 nan 值并为“速度”单元格值选择最大速度?


你可以使用 groupby fillna 的组合来实现,并对“速度”列应用 max 函数。以下是如何操作:

df1 = df.groupby(['Node', 'Interface', 'carrier']).max().reset_index()

df1 = df1.fillna(method='ffill')

这首先将数据框按“节点”、“接口”和“运营商”分组。然后它使用 fillna ffill 方法用每组中的前一个值填充 NaN 值。最后,它重置索引以使数据框恢复到其原始格式。

这是完整的代码:

import pandas as pd
import numpy as np

# 创建示例数据框
df = pd.DataFrame({
    'Node': ['Server1', 'Server1', 'Server1', 'Server2', 'Server2', 'Server2'],
    'Interface': ['internet1', 'wan3.0', 'wan3.0', 'wan2', 'wan2', 'Internet2'],
    'Speed': [10, 20, 50, 100, 20, 40],
    'carrier': ['ATT', 'Comcast', 'Comcast', 'Sprint', 'Sprint', 'Verizon'],
    '1-May': [20, np.nan, 30, 90, np.nan, 10],
    '9-May': [30, np.nan, 40, 70, np.nan, 60],
    '2-Jun': [50, np.nan, 40, np.nan, 88, 90],
    '21-Jun': [90, 100, np.nan, np.nan, 70, 70]
})

# 按“节点”、“接口”和“运营商”列对数据框进行分组
# 获取每个数值列的最大值
df1 = df.groupby(['Node', 'Interface', 'carrier']).max().reset_index()

# 使用前向填充来填充 NaN 值
df1 = df1.fillna(method='ffill')

print(df1)

输出:

      Node  Interface  carrier  Speed  1-May  9-May  2-Jun  21-Jun
0  Server1  internet1      ATT     10   20.0   30.0   50.0    90.0
1  Server1     wan3.0  Comcast     50   30.0   40.0   40.0   100.0
2  Server2    Internet2  Verizon     40   10.0   60.0   90.0    70.0
3  Server2        wan2   Sprint    100   90.0   70.0   88.0    70.0

说明:

  1. groupby(['Node', 'Interface', 'carrier']) : 这会根据指定的列创建数据框的分组。
  2. max() : 这会找到每个组中每列的最大值。这会处理“速度”列并忽略其他列的 NaN
  3. reset_index() : 这会将分组的索引转换回列,使输出成为整洁的数据框。
  4. fillna(method='ffill') : 这会使用前向填充方法填充剩余的 NaN 值,该方法用每列中前一个有效值替换 NaN 值。

这个代码应该可以给你你想要的结果,合并行、用其他行值替换 NaN 并选择“速度”列的最大值。

标签:python,pandas
From: 78795944

相关文章

  • PyTesseract 不提取文本?我是所有这些Python的新手,请需要h3lp
    它不想从图像中提取文本,就像终端保持黑色并带有空格,就像它实际上试图提取文本一样,这是我的代码和图像从PIL导入图像导入pytesseract导入CV2“C:\用户\埃米利亚诺\下载\practic.png”pytesseract.pytesseract.tesseract_cmd="C:\ProgramFiles\Tesseract-OCR\tesseract.exe......
  • Python安装第三方库
    Python安装PILPIL(PythonImagingLibrary)是一个旧的Python库,用于处理图像。然而,PIL已经不再维护,并被一个名为Pillow的库所取代。Pillow是PIL的一个分支,并且完全兼容PIL。建议使用Pillow而不是PIL。pipinstallpillowPython安装moviepymoviepy是一个用于视频编辑的Python库,......
  • 优化Python中图像中的OCR文本检测
    我目前正在用python编写一个程序,该程序获取包含大量文本的图像,将其提取到.txt文件,然后将找到的单词与另一个文件中的单词列表进行比较,并创建一些坐标(根据像素)在图像中找到的单词中,如果找到图像,则会在图像中绘制红色方块。到目前为止,我已经正确处理了坐标部分,在单词周围绘制了......
  • Python保存字典类型数据到文件的三种方法
    1、在Python中使用pickle模块的dump函数将字典保存到文件中importpicklemy_dict={'Apple':4,'Banana':2,'Orange':6,'Grapes':11}#保存文件withopen("myDictionary.pkl","wb")astf:pickle.dump(my_dict,tf)......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-53- 处理面包屑(详细教程)
    1.简介面包屑(Breadcrumb),又称面包屑导航(BreadcrumbNavigation)这个概念来自童话故事“汉赛尔和格莱特”,当汉赛尔和格莱特穿过森林时,不小心迷路了,但是他们发现沿途走过的地方都撒下了面包屑,让这些面包屑来帮助他们找到回家的路。所以,面包屑导航的作用是告诉访问者他们在网站中......
  • 如何使用 Python 在 Telegram 中进行标签搜索
    Telegram最近添加了一项新功能,可以在所有公共频道中同时按主题标签进行搜索:https://telegram.org/blog/message-effects-and-more#hashtag-search如何进行此类搜索用蟒蛇?(Telethon,Python-Telegram-Bot,...)我在Telethon文档中找到了这个函数:https://tl.......
  • 使用 Python 构建一个简单的 REST API
    使用Python构建一个简单的RESTAPI简介本文档将引导您使用Python和Flask框架构建一个简单的RESTAPI。我们将创建一个API,用于管理一个虚拟的书籍数据库。准备工作Python环境:确保您的系统上安装了Python3.x。Flask框架:使用pip安装Flask:pipinstallFla......
  • 写入羽毛或镶木地板文件格式时出现 Geopandas 错误 - UnsupportedGEOSVersionError:“i
    当尝试将pandas地理数据帧“gdf”写入羽毛文件格式时,我收到错误消息UnsupportedGEOSVersionError:The“iso”选项至少需要GEOS3.10.0gdf.to_feather("California_Buildings.feather")我环境中当前的GEOS版本是3.12.1应该满足这个要求...尽管我没有......
  • python学习之闭包与装饰器
    一、闭包闭包允许一个函数访问并操作函数外部的变量(即父级作用域中的变量),即使在该函数外部执行。特性:(1)外部函数嵌套内部函数。(2)外部函数可以返回内部函数。(3)内部函数可以访问外部函数的局部变量。defout():print("我是外层")n=10defins():......
  • 如何正确处理Python中的可选功能
    我正在开发实现科学模型的python包,我想知道处理可选功能的最佳方法是什么。这是我想要的行为:如果无法导入某些可选依赖项(例如,在无头机器上绘制模块),我想在我的类中禁用使用这些模块的功能,警告用户如果他尝试使用它们以及所有这些,而不会破坏执行。所以下面的脚本在任何情况下......