(先前的考虑:我不能改变数据框内数据的格式;我坚持使用我的内容。以下是我的数据和问题的简化版本)
我有一个包含以下格式的数据框:
2>nul
我想创建一个新列^
,如果df = pd.DataFrame(
{'Machine': [['red', 'blue'], ['red'], ['blue'], ['No Match']]})
Machine
0 [red, blue]
1 [red]
2 [blue]
3 [No Match]
中的值等于TF
和{{{},{}返回给定行True
1}}否则。
Machine
要做到这一点,我可以写:
['No Match']
我得到了这个输出:
False
原因是numpy期望 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
作为值传递到df['Machine']
语句中?作为工作原理的一个例子,对于以下数据框,一切都按预期工作:
['No Match']
按预期工作:
['No match']
答案 0 :(得分:2)
对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
:
True
如果只需要False
和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
但如果需要另外一些价值观:
list comprehension
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
的解决方案:
"Hello"