我有一个pandas数据框,如下所示:
第一进球 获胜者
阿尔及利亚 巴西
阿根廷 阿根廷
日本 德国
巴西 巴西
法国 法国
我想要检查第一进球的得分者是否是比赛的赢家。可以有人帮忙吗?
我有一个pandas数据框,如下所示:
第一进球 获胜者
阿尔及利亚 巴西
阿根廷 阿根廷
日本 德国
巴西 巴西
法国 法国
我想要检查第一进球的得分者是否是比赛的赢家。可以有人帮忙吗?
你需要:
df['is_winnder'] = df['FIRST GOAL'].str.lower() == df['WINNER'].str.lower()
输出:
FIRST GOAL WINNER is_winnder
0 Algeria brazil False
1 Argentina Argentina True
2 Japan Germany False
3 brazil brazil True
4 france France True
我理解为:
您需要将france
与France
进行比较,这需要对字符串进行规范化处理。我们可以将所有字母转换为UPPER
, lower
或Title
。我选择了lower
。
nunique
堆叠数据,然后使用str.lower
来规范大小写。在这个答案中,我将数据框进行了堆叠,以便只需在堆叠的Series对象上调用一次str.lower
。然后确定每个索引的第一个级别的唯一值的数量,这些唯一值是旧行。如果唯一值的数量等于1,则表示列必须相等。
df.stack().str.lower().groupby(level=0).nunique().eq(1)
0 False
1 True
2 False
3 True
4 True
dtype: bool
或者
df.assign(is_winner=df.stack().str.lower().groupby(level=0).nunique().eq(1))
FIRST GOAL WINNER is_winner
0 Algeria brazil False
1 Argentina Argentina True
2 Japan Germany False
3 brazil brazil True
4 france France True
Series.str.lower
str.lower()
。df.assign(is_winner=df['FIRST GOAL'].str.lower() == df['WINNER'].str.lower())
applymap
这很简洁。使用applymap
一次调用,使用str.lower
函数。然后我通过将values
数组解包到eq
运算符中变得有技巧性。
from operator import eq
df.assign(winner=eq(*df.applymap(str.lower).values.T))
applymap
,棒极了。 - Umar.H