gpt4 book ai didi

python - 过滤数据集中的多项分配

转载 作者:行者123 更新时间:2023-11-28 16:57:58 24 4
gpt4 key购买 nike

尝试对过滤后的数据集进行多项分配时,我遇到了一种我无法解释的奇怪行为。我的测试数据:

import pandas as pd
wert = 2.5
df = pd.DataFrame([['Test', 12, None, None], ['Test2', 15, None, None]], columns=['A','B','C','D'])

我的第一个问题发生在执行这行代码时:

df.loc[(df['A'] == 'Test'), ['D']] = df['B'] * wert

过滤器仅在左侧,那么 df['B'] 如何知道将值分配到何处?我认为 df['B'] 也应该被过滤,但这显然不是必需的。所以我走上前做有条件的多重赋值,并尝试执行这一行:

df.loc[(df['A'] == 'Test'), ['C', 'D']] = [1, df['B'] * wert]

现在我收到错误 ValueError: cannot set using a list-like indexer with a different length than the value。我的解释是数组 df['B'] 比 df.loc[df['A']=='Test) 长,但由于这在示例 1 中运行良好,因此不能作为解释.谁能告诉我为什么这不起作用并给我这个错误?

最佳答案

为什么会这样?

因为 pandas 会在以下情况下引发 ValueError:

the indexer is an ndarray or list and the lengths don't match.

An special-case is allowed for when the indexer is a boolean array and the number of true values equals the length of value. In this case, no exception is raised.

source

如果你不想过滤df['B']来匹配,你可以使用df.assign():

df.loc[(df['A'] == 'Test')].assign(C=1, D=df['B'] * wert)

关于python - 过滤数据集中的多项分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56544290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com