当前位置: 首页 > 知识库问答 >
问题:

pandas使用 DataFrame 自身的某一行修改另一行的值,被修改的那一行会被清空?

黎承颜
2023-10-13

df1 为:

    A   B   C   D0  A0  B0  C0  D01  A1  B1  C1  D12  A2  B2  C2  D23  A3  B3  C3  D3

df2 为:

    A   B   C     D1  A1  B4  C4    D42  A5  B5  C5    D53  A6  B6  C6  None4  A7  B7  C7    D7

如果想要修改 df2 中第一行的值,使用:

df2.loc[df2['A']=='A1', ('B', 'C', 'D')] = df2.loc[df2['A']=='A5', ('B', 'C', 'D')],df2 会变为:

    A    B    C     D1  A1  NaN  NaN   NaN2  A5   B5   C5    D53  A6   B6   C6  None4  A7   B7   C7    D7

第一行的值全部变为了空值,但是同样的句式,使用 df1 给 df2 的第一行赋值:
df2.loc[df2['A']=='A1', ('B', 'C', 'D')] = df1.loc[df1['A']=='A1', ('B', 'C', 'D')],则可以成功赋值,df2 为:

    A   B   C     D1  A1  B1  C1    D12  A5  B5  C5    D53  A6  B6  C6  None4  A7  B7  C7    D7

另外,如果将第一个赋值语句改为:df2.loc[df2['A']=='A1', ('B', 'C', 'D')] = df2.loc[df2['A']=='A5', ('B', 'C', 'D')].values,也是可以赋值成功的:

    A   B   C     D1  A1  B5  C5    D52  A5  B5  C5    D53  A6  B6  C6  None4  A7  B7  C7    D7

请教一下大神,为什么结果会这样?

共有1个答案

吴子昂
2023-10-13

你是不是测试有问题
df2.loc[df2['A'] == 'A1', ('B', 'C', 'D')] = df1.loc[df1['A'] == 'A1', ('B', 'C', 'D')] 不加 values 也是一样的情况。

import pandas as pddata1 = {    'A': ['A0', 'A1', 'A2', 'A3'],    'B': ['B0', 'B1', 'B2', 'B3'],    'C': ['C0', 'C1', 'C2', 'C3'],    'D': ['D0', 'D1', 'D2', 'D3']}data2 = {    'A': ['A1', 'A5', 'A6', 'A7'],    'B': ['B4', 'B5', 'B6', 'B7'],    'C': ['C4', 'C5', 'C6', 'C7'],    'D': ['D4', 'D5', None, 'D7']}df1 = pd.DataFrame(data1)df2 = pd.DataFrame(data2)print(df1)print(df2)df2.loc[df2['A'] == 'A1', ('B', 'C', 'D')] = df1.loc[df1['A'] == 'A1', ('B', 'C', 'D')]print(df2)# df2.loc[df2['A'] == 'A1', ('B', 'C', 'D')] = df2.loc[df2['A'] == 'A5', ('B', 'C', 'D')]# print(df2)
 类似资料:
  • 问题内容: 当仅使用css将鼠标悬停在另一个类的元素上时,是否可以修改一个类的css? 就像是: 只有“包装器”不在“项目”内部,而是在其他地方。 我真的不想在简单的事情上使用javascript,但是如果必须的话,我该怎么做?这是我失败的尝试: 每个班级只有一个要素。不知道为什么他们在制作模板时不使用ID,但这就是事实,我无法更改。 [编辑] 这是一个菜单。每个菜单元素都有一个不同的类。当您将鼠

  • 问题内容: 我有以下Pandas DataFrame,我想创建另一列来比较col1的前一行,以查看它们是否相等。最好的方法是什么?就像下面的DataFrame。谢谢 问题答案: 您需要使用: 或改为使用,但是在大型DataFrame中,它会稍微慢一些: 时间 :

  • 问题内容: 假设我有以下DataFrame: 这按预期工作: 但这不是: 为什么?我如何在不必写两行的情况下实现“苹果”和“香蕉”值的转换 问题答案: 您应该使用loc, 而无需链接 : 请参阅有关 返回视图与副本的文档,如果将链接分配给副本(并丢弃),但是如果将它分配给一个位置,则大熊猫会聪明地意识到您想要分配给原始副本。

  • 本文向大家介绍pandas修改DataFrame列名的方法,包括了pandas修改DataFrame列名的方法的使用技巧和注意事项,需要的朋友参考一下 在做数据挖掘的时候,想改一个DataFrame的column名称,所以就查了一下,总结如下: 数据如下: 方法一:暴力方法 但是缺点是必须写三个,要不报错。 方法二:较好的方法 好处是可以随意改个数: 可以只改变'A','C',不改变'B'。 以上

  • 我是java多线程编程的新手。我知道它可以通过线程通信来完成,但我不知道如何继续。我不知道如果在文件中进行了一些更改,一个线程将如何通知另一个线程。问题在下面提到。 我有一个逗号分隔的文件,其中写入了一些行。我希望从我的主线程启动两个线程。csv文件可能会附加到外部/手动。如果csv文件中做了一些更改,其中一个线程将通知第二个线程,第二个线程将逐行并发读取该文件并执行一些任务。 谢谢