gpt4 book ai didi

python - 使用 np.where (ValueError : Arrays were different lengths)

转载 作者:太空宇宙 更新时间:2023-11-04 02:57:01 25 4
gpt4 key购买 nike

非常感谢您的阅读。

(事先考虑:我无法更改数据框中数据的格式;我坚持使用现有的内容。以下是我的数据和问题的简化和简化版本)

我有一个具有以下形式的数据框:

df = pd.DataFrame(
{'Machine': [['red', 'blue'], ['red'], ['blue'], ['No Match']]})

Machine
0 [red, blue]
1 [red]
2 [blue]
3 [No Match]

我想创建一个新列 TF,如果 Machine 中的值相等,它会为给定行返回 True['No Match'] 否则为 False

       Machine     TF  
0 [red, blue] False
1 [red] False
2 [blue] False
3 [No Match] True

为此,我可以写:

df['TF'] = np.where(df['Machine'] == ['No Match'],True, False)

我得到这个输出:

ValueError: Arrays were different lengths: 4 vs 1

这样做的原因是 numpy 期望 df['Machine']['No Match'] 的长度相等,或者对于右边的标准成为一个简单的字符串/值。

如何调整此表达式以将数组 ['No match'] 作为值成功传递到 np.where() 语句中?

作为工作原理的示例,对于以下数据框,一切都按预期工作:

df1 = pd.DataFrame(
{'Machine': [['red', 'blue'], ['red'], ['blue'], 'No Match']})

df1['TF'] = np.where(df1['Machine'] == 'No Match',True, False)

按预期工作:

       Machine     TF
0 [red, blue] False
1 [red] False
2 [blue] False
3 No Match True

最佳答案

您需要使用 == apply 来检查 list 中的值:

df['TF'] = np.where(df['Machine'].apply(lambda x: ['No Match'] == x),True, False)
print (df)
Machine TF
0 [red, blue] False
1 [red] False
2 [blue] False
3 [No Match] True

如果只需要 TrueFalse 则更简单:

df['TF'] = df['Machine'].apply(lambda x: ['No Match'] == x)
print (df)
Machine TF
0 [red, blue] False
1 [red] False
2 [blue] False
3 [No Match] True

但如果需要一些其他值:

df['TF'] = np.where(df['Machine'].apply(lambda x: ['No Match'] == x),'a', 'b')
print (df)
Machine TF
0 [red, blue] b
1 [red] b
2 [blue] b
3 [No Match] a

列表理解的解决方案:

df['TF'] = [['No Match'] == x for x in df['Machine']]
print (df)
Machine TF
0 [red, blue] False
1 [red] False
2 [blue] False
3 [No Match] True

关于python - 使用 np.where (ValueError : Arrays were different lengths),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42070410/

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