有人能帮忙吗。无论我做什么,当我试图设置多个列时,我总是会遇到某种长度不匹配的错误。
这两条线工作:
df.loc[(condition), ['column1', 'column2']] = 10, 20
df.loc[(condition), ['column1', 'column2']] = df['column3'] + 10
这会产生错误Must have equal len keys and value when setting with an ndarray
df.loc[(condition), ['column1', 'column2']] = df['column3'] + 10, df['column3'] - 10
对我来说没有意义,因为len(column1) = len(column2)
和len(df['column3'] + 10) = len(df['column3'] - 10)
上至少有两件事
一个是——什么是condition
?如果它只选择左手边的一些行,就会出现长度不匹配的
即使长度相同,左边有一个大小为(N,2)
的数组(其中N是行数(,右边有一个由两个数组组成的元组,因此为(2,N)
。Pandas或numpy不知道如何将它们广播成相同的形状
我认为最简单的方法是一列接一列。但我能得到的最接近你的语法的是
df.loc[(condition), ['column1', 'column2']] = df[['column3']].values + np.array([10,20])
在这里,愚蠢的广播规则开始影响rhs,使其成为正确的形状