np.where在数据帧中未返回预期结果

时间:2019-12-18 09:29:22

标签: python pandas numpy

我已经看过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。 抱歉,这是问题所在,有时寻找更复杂的解决方案会失去一个简单的答案-至少对我来说,这是我希望学习的东西 我将如何克服这个问题?

编辑2: 数据框的最后几列如下所示 enter image description here

如果HCS为“是”,则表示工作表干净(home_team_goal_count等于零),因此BTTS应该为“否”

1 个答案:

答案 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')