我正在尝试使用索引将表中的一行更新为上一行。我在更新真实数据集时遇到问题,并且无法在玩具示例上重现错误。这是问题的图片。
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)
感谢您的宝贵时间。
您的示例与您原来的问题不同。这是更接近的东西:
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