我有一个熊猫数据帧,如下所示:
第一个进球 获胜
者 阿尔及利亚 巴西
阿根廷 阿根廷
日本 德国
巴西 巴西 法国 法国
我想检查第一个进球者是否是比赛的获胜者。 有人可以帮忙吗?
你需要:
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
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
这几乎与Harv Ipan的回答相同,只是我添加了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))