【问题标题】:Pandas (with def and np.where): error with values in a dataframe row conditioned on another dataframe rowPandas(使用 def 和 np.where):数据框行中的值错误,以另一个数据框行为条件
【发布时间】:2021-11-27 15:46:39
【问题描述】:

我有形状 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: 无法使用长度与值不同的类似列表的索引器进行设置

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

【问题讨论】:

    标签: pandas function where-clause valueerror


    【解决方案1】:

    我发现了错误。我错误地在索引中有两次相同的标签。基本上我的数据框 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 之外工作。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    • @FranciscoMariaCalisto 我已经更正了我的问题并扩展了答案以使其更清晰,谢谢
    • 干得好,恭喜!通过您编辑的答案,我们现在可以了解您要解决的问题的范围问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 2017-01-21
    相关资源
    最近更新 更多