首页 > 编程问答 >如果值相同,则对行进行排序

如果值相同,则对行进行排序

时间:2024-08-09 14:58:14浏览次数:15  
标签:python pandas dataframe numpy

如果A+B+C行的值与D+E+F行的值匹配,则将D+E+F行带到A+B+C的同一行。

df为:| ||我所有的尝试,例如掩码、替换或排序均不成功。

df = pd.DataFrame({"A":['02.04.2024','03.04.2024', '04.04.2024', '05.04.2024', '06.04.2024',],
                   "B":['01:00:00', '02:00:00', '03:00:00', '04:00:00', '05:00:00'],
                   "C":['1111', '1111', '1111', '1111', '1111'],
                   "D":['03.04.2024', '', '06.04.2024', '02.04.2024', ''],
                   "E":['02:00:00', '', '05:00:00', '01:00:00',''],
                   "F":['1111','', '1111', '1111','']})
print(df)
            A         B     C           D         E     F
0  02.04.2024  01:00:00  1111  03.04.2024  02:00:00  1111
1  03.04.2024  02:00:00  1111                            
2  04.04.2024  03:00:00  1111  06.04.2024  05:00:00  1111
3  05.04.2024  04:00:00  1111  02.04.2024  01:00:00  1111
4  06.04.2024  05:00:00  1111


df expected :

            A         B     C           D         E     F
0  02.04.2024  01:00:00  1111  02.04.2024  01:00:00  1111
1  03.04.2024  02:00:00  1111  03.04.2024  02:00:00  1111
2  04.04.2024  03:00:00  1111                            
3  05.04.2024  04:00:00  1111                            
4  06.04.2024  05:00:00  1111  06.04.2024  05:00:00  1111

All my attempts with e.g. mask, replace or sort were unsuccessful.

Blockquote


以下是使用 Pandas 在 Python 中完成此操作的方法:

import pandas as pd

df = pd.DataFrame({"A": ['02.04.2024', '03.04.2024', '04.04.2024', '05.04.2024', '06.04.2024', ],
                   "B": ['01:00:00', '02:00:00', '03:00:00', '04:00:00', '05:00:00'],
                   "C": ['1111', '1111', '1111', '1111', '1111'],
                   "D": ['03.04.2024', '', '06.04.2024', '02.04.2024', ''],
                   "E": ['02:00:00', '', '05:00:00', '01:00:00', ''],
                   "F": ['1111', '', '1111', '1111', '']})

# 创建 (A, B, C) 和 (D, E, F) 的元组列
df['ABC'] = df[['A', 'B', 'C']].apply(tuple, axis=1)
df['DEF'] = df[['D', 'E', 'F']].apply(tuple, axis=1)

# 将 DataFrame 转换为字典,其中键是 'DEF' 元组,值是 'ABC' 元组
# 如果 'DEF' 元组的所有元素都为空,则忽略该行
mapping = {row['DEF']: row['ABC'] for _, row in df.iterrows() if any(row['DEF'])}

# 创建一个新列 'GHI',如果在映射中找到了匹配的 'ABC' 元组,则包含 'DEF' 元组
df['GHI'] = df['ABC'].apply(lambda x: mapping.get(x, ('', '', '')))

# 从 'GHI' 元组中提取值到列 'D'、'E' 和 'F'
df[['D', 'E', 'F']] = df['GHI'].apply(pd.Series)

# 删除临时列
df = df.drop(['ABC', 'DEF', 'GHI'], axis=1)

print(df)

这将给出所需的输出:

            A         B     C           D         E     F
0  02.04.2024  01:00:00  1111  02.04.2024  01:00:00  1111
1  03.04.2024  02:00:00  1111  03.04.2024  02:00:00  1111
2  04.04.2024  03:00:00  1111                            
3  05.04.2024  04:00:00  1111                            
4  06.04.2024  05:00:00  1111  06.04.2024  05:00:00  1111

代码的工作原理如下:

  1. 创建元组列: 我们创建了两个新列“ABC”和“DEF”,它们分别包含来自列 (A, B, C) 和 (D, E, F) 的值作为元组。这将有助于我们将这些列组合视为键和值。
  2. 创建映射字典: 我们创建一个字典,其中“DEF”元组作为键,“ABC”元组作为值。这将帮助我们基于匹配的值查找相应的行。我们仅在“DEF”元组中至少有一个非空元素时才包括行。
  3. 映射匹配值: 我们创建一个新列“GHI”,其中包含通过在映射字典中查找“ABC”元组获得的相应“DEF”元组。如果在映射中找不到“ABC”元组,我们将使用 ('', '', '') 填充“GHI”列。
  4. 更新列 D、E 和 F: 我们使用来自“GHI”元组的值更新列 D、E 和 F。
  5. 删除临时列: 我们删除临时列“ABC”、“DEF”和“GHI”。

这应该可以解决你的问题。祝你好运!

标签:python,pandas,dataframe,numpy
From: 78847521

相关文章

  • 如何使用 Python 从 Excel 工作表中读取正斜杠
    我有20多列的Excel工作表,如果我想选择不包含文本n/a的行,是否可以将n/a作为文本传递并找到它?我尝试过的代码是,''''将pandas导入为pd进口重新导入操作系统defextract_data(input_file):#读取输入的Excel文件df=pd.read_excel(input_file)#Checkif'......
  • 零基础学习人工智能—Python—Pytorch学习(三)
    前言这篇文章主要两个内容。一,把上一篇关于requires_grad的内容补充一下。二,介绍一下线性回归。关闭张量计算关闭张量计算。这个相对简单,阅读下面代码即可。print("============关闭require_grad==============")x=torch.randn(3,requires_grad=True)print(x)x.requir......
  • python配置pip镜像
    Python配置pip的镜像国内的网络通过pip下载软件包只有不到10k的下载速度。不仅下载的慢,还容易引发超时错误,导致下载失败。而将给pip配置国内的镜像源可以完美的解决这个问题。本文讲解了pip在windows和macos/linux的配置过程(在windows实操成功)一、找到配置文件1.windows在......
  • Pytorch深度学习入门基础(三):python 加载数据初认识
    目录 一、 导入二、数据集中数据和label的组成形式三、Dataset读入数据四、Dataset类代码实战4.1创建函数4.2  设置初始化函数4.3读取每一个图片4.4设置获取数据长度函数4.5创建实例4.5.1单个图片数据集4.5.2 多个图片数据集    现在来开......
  • python多版本共存和虚拟环境
    多版本共存1.调用方式"py-3.10",即可使用对应版本的python虚拟环境1.vscode底部切到CMD,敲"py-3.8-mvenv.venv"(虚拟环境文件夹名,通常用".venv")2.点击vscode右下角,选择虚拟环境作为解释器注:以"."开头的文件在计算机系统中通常被称为隐藏文件。这些文件在许多操作系统中默认是不......
  • Python练习:数据类型篇
    一、逻辑推理练习  1、在不运行下面程序的前提下,说出答案。 1.4.0==42."4.0"==43.bool("1")4.bool("0")5.str(32)6.int(6.26)7.float(32)8.float("3.21")9.int("434")10.int("3.42")11.bool(-1)12......
  • MySQL——使用Python操作MySQL
    文章目录安装PyMySQL使用PyMySQL操作MySQL在Python中操作MySQL数据库时,我们使用较多的库是PyMySQL,如果你选择使用PyMySQL库,那么首先需要通过pip安装它。pipinstallpymysql命令就是用来安装PyMySQL的。安装PyMySQL1.打开你的命令行工具(如cmd、PowerShell、......
  • Python按条件删除Excel表格数据的方法
      本文介绍基于Python语言,读取Excel表格文件,基于我们给定的规则,对其中的数据加以筛选,将不在指定数据范围内的数据剔除,保留符合我们需要的数据的方法。  首先,我们来明确一下本文的具体需求。现有一个Excel表格文件(在本文中我们就以.csv格式的文件为例),如下图所示。  其中,Ex......
  • Python 提取出SQL语句中Where的值的方法
    1.方法一:使用sqlparse库的方法为了提取SQL语句中WHERE子句的值,我们可以利用Python的sqlparse库,这是一个专门用于解析SQL语句的库。以下是一个示例代码,演示如何使用sqlparse来提取WHERE子句中的条件。首先,确保安装了sqlparse库。如果未安装,可以使用pip安装:bash复制代码pipins......
  • 12-python函数的传参——形参、实参、装包 *args和**kwargs
    函数的参数1形参和实参函数的参数:在定义函数时,可以再函数名后()中定义数量不等的形参,注意可以有也可以没有,可有一个也可有多个,多个形参之间用逗号隔开形参(形式参数):定义形参就相当于在函数内部声明了变量,但是并不赋值实参(实际参数):在函数定义时指定了形参,在调用的时......