我已经看过np.where的示例,并认为我已经破解了,但是得到的结果仍然不正确。 我有一个足球比赛结果的数据框,希望根据主队和客队的得分都返回“是”或“否”。 我尝试过的代码仅返回“是”,而我看不到为什么?
我希望看到的是“是”,其中“ home_team_goal_count” 和“ away_team_goal_count”不为零。
我尝试过:
resultsdf['BTTS'] = np.where((resultsdf['home_team_goal_count'] == '0') | (resultsdf['away_team_goal_count'] == '0'), 'No', 'Yes')
“ BTTS”将是新列。 这是从我找到的修改答案中尝试的
然后:
resultsdf['BTTS'] = np.where((resultsdf['home_team_goal_count'] != '0') & (resultsdf['away_team_goal_count'] != '0'), 'Yes', 'No')
因为我想把重点转移到寻找非零值上,但是我仍然只返回“是”。
然后:
resultsdf['BTTS'] = np.where(np.logical_and(resultsdf['home_team_goal_count'] != '0', resultsdf['away_team_goal_count'] != '0'), 'Yes', 'No')
因为我碰到过另一则建议使用“ np.logical”或“ |”的帖子或“&”
所有3种方式在新的“ BTTS”列中均返回“是”,而不返回“否”。
帮助表示赞赏。
编辑: 返回的dtype如下
date_GMT object
home_team_name object
away_team_name object
home_team_goal_count int64
away_team_goal_count int64
total_goal_count int64
home_team_goal_count_half_time int64
away_team_goal_count_half_time int64
total_goals_at_half_time int64
home_team_goal_timings object
away_team_goal_timings object
HCS object
ACS object
HCSCount int64
ACSCount int64
BTTS object
dtype: object
这是因为BTTS是对象吗?
我之前看过dtype,发现主场和客场目标均为int64,因此假定BTTS也将为int64。 抱歉,这是问题所在,有时寻找更复杂的解决方案会失去一个简单的答案-至少对我来说,这是我希望学习的东西 我将如何克服这个问题?
如果HCS为“是”,则表示工作表干净(home_team_goal_count等于零),因此BTTS应该为“否”
答案 0 :(得分:2)
我建议检查您数据框的dtypes
。
因为您选择的方法必须有效。
>>> df
x y
0 1 0
1 1 0
2 0 0
3 0 0
4 1 0
5 0 0
6 1 0
7 1 0
8 1 1
9 1 0
>>> df['result'] = np.where((df.x=='0') | (df.y == '0'), "No", "Yes")
>>> df
x y result
0 1 0 No
1 1 0 No
2 0 0 No
3 0 0 No
4 1 0 No
5 0 0 No
6 1 0 No
7 1 0 No
8 1 1 Yes
9 1 0 No
>>> df.dtypes
x object
y object
result object
dtype: object
修改
resultsdf['BTTS'] = np.where((resultsdf['home_team_goal_count'] == 0) | (resultsdf['away_team_goal_count'] == 0), 'No', 'Yes')