如何在熊猫中比较两个带有字符串的单元格?



我有一个熊猫数据帧,如下所示:

第一个进球       获胜

者          阿尔及利亚 巴西
阿根廷 阿根廷
日本 德国           
巴西 巴西             法国 法国

               

我想检查第一个进球者是否是比赛的获胜者。 有人可以帮忙吗?

你需要:

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进行比较。 我们可以将所有字母设为UPPERlowerTitle。 我和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))

相关内容

  • 没有找到相关文章

最新更新