Pandas(使用 def 和 np.where):以另一个数据帧行为条件的数据帧行中的值错误

Pandas (with def and np.where): error with values in a dataframe row conditioned on another dataframe row

我有形状为 XxY 的数据框 A,其值和形状为 ZxY 的数据框 B 将填充从 A 计算的统计数据。

举个例子:

A = pd.DataFrame(np.array(range(9)).reshape((3,3)))
B = pd.DataFrame(np.array(range(6)).reshape((2,3)))

现在我需要用 A 列的分位数 (0.5) 填充 B 的第 1 行,其中 B 的第 0 行 > 1(否则:np.nan)。我需要使用这样的函数:

def mydef(df0, df1):
    df1.loc[1] = np.where(df1.loc[0]>1,
                          df0.quantile(0.5),
                          np.nan)
    pass

mydef(A,B)

现在 B 是:

    0   1   2
0   0.0 1.0 2.0
1   NaN NaN 3.5

它非常适合这些模拟数据帧和我所有的真实数据帧除了一个。 对于那个错误引发了:

ValueError:无法使用长度不同于值

的类似列表的索引器进行设置

当我 运行 没有调用函数的相同代码时,它不会引发任何错误。 由于我需要使用一个函数,有什么建议吗?

我发现了错误。我错误地在索引中使用了相同的标签两次。基本上我的数据框 B 是这样的:

B = pd.DataFrame(np.array(range(9)).reshape((3,3)), index=[0,0,1])

以便调用 def:

def mydef(df0, df1):
df1.loc[1] = np.where(df1.loc[0]>1,
                      df0.quantile(0.5),
                      np.nan)
pass
我猜

会导致 np.where 的条件和 if-false 行与其形状不匹配。

仍然不确定为什么在 def 之外工作有效。