使用数据框另一部分的数据编辑 pandas 数据框中的值

2024-03-28

我希望在 Pandas DataFrame 的一部分上使用索引来编辑值 对应另一个索引。这是一个例子:

>>> from pandas import *
>>> from numpy.random import randn
>>> x = DataFrame(randn(3, 3), columns=[1, 2, 3], index=['a', 'b', 'c'])
>>> print x

        1         2         3
a -1.007344  0.234990  0.772736
b  0.658360  1.330051 -0.269388
c  0.010871  1.035687  0.230169


>>> index1 = x.index[0:2]
>>> index2 = x.index[1:3]
>>> y = x
>>> x.loc[index1, 3] = x.loc[index2, 2]
>>> print x


        1         2         3
a -1.007344  0.234990       NaN
b  0.658360  1.330051  1.330051
c  0.010871  1.035687  0.230169

后者的输出是相当意外的。相反,有效的方法如下:

>>> y.loc[index1, 3] = y.loc[index2, 2].values
>>> print y

       1         2         3
a -1.007344  0.234990  1.330051
b  0.658360  1.330051  1.035687
c  0.010871  1.035687  0.230169

然而,后一种解决方案对于我想要使用的许多应用程序来说并不方便。例如,我想写:

x.loc[index1, 3] = x.loc[index2, 2]+2 

or

x.loc[index1, 3] = x.loc[index1, 3] + x.loc[index2, 2]

etc.

还有其他方法可以解决这个问题吗?

提前致谢!


Pandas 非常适合根据索引进行对齐。如果您考虑一下,“意外”结果实际上是可以理解的

x.loc[index1, 3]

作为带有索引标签的系列['a', 'b']和作业

x.loc[index1, 3] = x.loc[index2, 2]

正在分配新值x.loc[index2, 2]这是一个带有索引标签的系列['b', 'c']。因为只有右边的数据aligns系列位于标签左侧'b',该标签获得新值,而标签a被设定为NaN,因为右侧对于该索引没有值。

当您希望 Pandas 忽略索引时,您需要在右侧传递一个没有索引的对象。所以,正如你所表明的,

y.loc[index1, 3] = y.loc[index2, 2].values

产生所需的结果。

同样,对于更复杂的作业,您可以使用

x.loc[index1, 3] = x.loc[index2, 2].values + 2

or

x.loc[index1, 3] += x.loc[index2, 2].values

(注意第二个赋值使用就地加法运算符,+=.)

如果您有很多忽略索引的作业,那么也许您应该使用 NumPy 数组而不是 Pandas DataFrame。

import pandas as pd
import numpy as np

x = pd.DataFrame(np.arange(9).reshape((3, 3)), columns=[1, 2, 3], index=['a', 'b', 'c'])
arr = x.values
print(arr)
# [[0 1 2]
#  [3 4 5]
#  [6 7 8]]

index1 = slice(0,2)
index2 = slice(1,3)
arr[index1, 2] = arr[index2, 1]
print(arr)
# [[0 1 4]
#  [3 4 7]
#  [6 7 8]]

# Instead of x.loc[index1, 3] = x.loc[index2, 2]+2 
arr[index1, 2] = arr[index2, 1] + 2
print(arr)
# [[0 1 6]
#  [3 4 9]
#  [6 7 8]]

# Instead of x.loc[index1, 3] = x.loc[index1, 3] + x.loc[index2, 2]
arr[index1, 2] += arr[index2, 1]
print(arr)
# [[ 0  1 10]
#  [ 3  4 16]
#  [ 6  7  8]]

x.loc[:,:] = arr
print(x)
#    1  2   3
# a  0  1  10
# b  3  4  16
# c  6  7   8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用数据框另一部分的数据编辑 pandas 数据框中的值 的相关文章

  • 如何在 Google App Engine 的 Python 中获取 StringProperty 的值?

    如何获取 nbd Model 的值 我想返回由多个字段组成的描述 但我无法让它工作 这是我的班级代码 class User ndb Model name ndb StringProperty email ndb StringProperty
  • 如何使用 Python 裁剪图像中的矩形

    谁能给我关于如何裁剪两个矩形框并保存它的建议 我已经尝试过这段代码 但效果不佳 import cv2 import numpy as np Run the code with the image name keep pressing spa
  • 组和平均 NumPy 矩阵

    假设我有一个任意的 numpy 矩阵 如下所示 arr 6 0 12 0 1 0 7 0 9 0 1 0 8 0 7 0 1 0 4 0 3 0 2 0 6 0 1 0 2 0 2 0 5 0 2 0 9 0 4 0 3 0 2 0 1 0
  • Tipfy:如何在模板中显示blob?

    鉴于在 gae 上使用tipfy http www tipfy org python 以下模型 greeting avatar db Blob avatar 显示 blob 此处为图像 的模板标签是什么 在这种情况下 斑点是一个图像 这很棒
  • 在Python中以交互方式执行多行语句

    我是 Python 世界的新手 这是我用 Python 编写的第一个程序 我来自 R 世界 所以这对我来说有点不直观 当我执行时 In 15 import math import random random random math sqrt
  • 如何在Python代码中查找列号

    简短问题 当按上述方式调用函数时 我可以找到行号here https stackoverflow com questions 3056048 filename and line number of python script 同样 如何找到
  • Python——捕获异常的效率[重复]

    这个问题在这里已经有答案了 可能的重复 Python 常见问题解答 异常有多快 https stackoverflow com questions 8107695 python faq how fast are exceptions 我记得
  • Django 模型字段默认基于另一个模型字段

    我使用 Django Admin 构建一个管理站点 有两张表 一张是ModelA其中有数据 另一个是ModelB里面什么也没有 如果一个模型字段b b in ModelB为None 可以显示在网页上 值为ModelA的场a b 我不知道该怎
  • 按多个键分组并对字典列表的值进行汇总/平均值

    在Python中按多个键进行分组并对字典列表进行汇总 平均值的最Pythonic方法是什么 假设我有一个字典列表 如下所示 input dept 001 sku foo transId uniqueId1 qty 100 dept 001
  • 如何将类添加到 LinkML 中的 SchemaDefinition?

    中的图表https linkml io linkml model docs SchemaDefinition https linkml io linkml model docs SchemaDefinition and https link
  • PyArmor - 打包为一个可执行文件

    当我执行此命令时 您好 使用 PyArmor pyarmor pack main py 它将它打包到一个名为的文件夹中dist里面包含我的 exe 以及许多 Python 扩展文件 据我所知 PyArmor 使用 PyInstaller 来
  • Solr 索引时间提升 VS 查询时间提升?

    问题 1 我们可以只进行查询时间提升 使用 dismax 而不在索引时间提及提升值吗 问题 2 与查询时间提升相比 索引时间提升有何优点 缺点 反之亦然 查询时间和索引时间提升 在索引时 您可以选择提升特定文档 整个文档或仅一个字段 它作为
  • 如何正确导入主代码和模块中同时使用的模块?

    假设我有一个主脚本 main py 它导入另一个 python 文件import coolfunctions另一个 import chores 现在 假设 Coolfunctions 也使用家务活中的东西 因此我声明import chore
  • 在python中读取PASCAL VOC注释

    我在 xml 文件中有注释 例如这个 它遵循 PASCAL VOC 约定
  • 更换壳牌管道[重复]

    这个问题在这里已经有答案了 在 subprocess 模块的 Python 2 7 文档中 我找到了以下片段 p1 Popen dmesg stdout PIPE p2 Popen grep hda stdin p1 stdout stdo
  • Python 导入非常慢 - Anaconda python 2.7

    我的 python import 语句变得非常慢 我使用 Anaconda 包在本地运行 python 2 7 导入模块后 我编写的代码运行得非常快 似乎只是导入需要很长时间 例如 我使用以下代码运行了一个 tester py 文件 imp
  • 如何使用 os.chdir 转到减去最后一步的路径?

    例如 一个方法传递了一个路径作为参数 这个路径可能是 C a b c d 如果我想使用 os chdir 更改为 C a b 怎么办 c 没有最后一个文件夹 os chdir 可以接受 命令吗 os chdir 可以采取 作为论点 是的 然
  • 更新 SQLAlchemy 中的特定行

    我将 SQLAlchemy 与 python 一起使用 我想更新表中等于此查询的特定行 UPDATE User SET name user WHERE id 3 我通过 sql alchemy 编写了这段代码 但它不起作用 session
  • 沿轴 0 重复 scipy csr 稀疏矩阵

    我想重复 scipy csr 稀疏矩阵的行 但是当我尝试调用 numpy 的重复方法时 它只是将稀疏矩阵视为对象 并且只会将其作为 ndarray 中的对象重复 我浏览了文档 但找不到任何实用程序来重复 scipy csr 稀疏矩阵的行 我
  • 使用 SERVER_NAME 时出现 Flask 404

    在我的 Flask 配置中 我将 SERVER NAME 设置为 app example com 之类的域 我这样做是因为我需要使用url for with external网址 如果未设置 SERVER NAME Flask 会认为服务器

随机推荐