根据条件设置从另一列派生的多个列



有人能帮忙吗。无论我做什么,当我试图设置多个列时,我总是会遇到某种长度不匹配的错误。

这两条线工作:

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,使其成为正确的形状

最新更新