在 python 中更新一行

问题描述 投票:0回答:1

我正在尝试使用索引将表中的一行更新为上一行。我在更新真实数据集时遇到问题,并且无法在玩具示例上重现错误。这是问题的图片。

Date==ts 的行应更新为 Date==tsPrevious 的行。屏幕截图显示了日期、我想要用来更新的行以及我想要更新的行。最后一个代码块是我尝试将 ts 行更新为 tsPrevious 行。但您可以看到与 ts 关联的行未更改。

此代码是一个玩具示例,在下面的屏幕截图中,您会看到它按预期工作:

testDF = pd.DataFrame(columns = ["Col1", "Col2","Col3"])
testDF["Col1"] = [1,2]
testDF.iloc[0,1] = 7
print(testDF)

testDF.loc[1,1:2] = testDF.iloc[0,1:2]
print(testDF)

感谢您的宝贵时间。

python pandas dataframe indexing
1个回答
0
投票

您的示例与您原来的问题不同。这是更接近的东西:

import pandas as pd

cols = ["Col1", "Col2", "Col3"]

testDF = pd.DataFrame(columns=cols)
testDF["Col1"] = [1, 2]
testDF.iloc[0, 1] = 7

# This doesn't work
testDF.loc[testDF["Col1"] == 2, cols[1:]] = testDF.loc[testDF["Col1"] == 1, cols[1:]]

当您使用

.loc
进行分配时,Pandas 只会在索引对齐的地方进行分配。在此示例中,您尝试设置索引 0,但在右侧只有索引 1,因此它没有任何作用。

为了克服这个问题,您可以使用

.values
:

访问行的值
import pandas as pd

cols = ["Col1", "Col2", "Col3"]

testDF = pd.DataFrame(columns=cols)
testDF["Col1"] = [1, 2]
testDF.iloc[0, 1] = 7

# This works
testDF.loc[testDF["Col1"] == 2, cols[1:]] = testDF.loc[testDF["Col1"] == 1, cols[1:]].values
© www.soinside.com 2019 - 2024. All rights reserved.