我有一个pandas数据帧如下:
第一个目标获胜者
阿尔及利亚巴西
阿根廷阿根廷 日本德国
巴西巴西
法国法国
我想检查第一个进球者是否是比赛的胜利者。有人可以帮忙吗?
答案 0 :(得分:4)
你需要:
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
答案 1 :(得分:0)
IIUC:
您需要将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()
之外,这几乎与Harv Ipan的答案完全相同。
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))