【问题标题】:how to compare two cells with strings in pandas?如何将两个单元格与熊猫中的字符串进行比较?
【发布时间】:2018-11-16 21:04:34
【问题描述】:

我有一个熊猫数据框如下:

第一个目标      获胜者

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

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

【问题讨论】:

  • 试图在数据帧的切片副本上设置一个值。尝试改用 .loc[row_indexer,col_indexer] = value 查看文档中的警告:pandas.pydata.org/pandas-docs/stable/… """启动 IPython 内核的入口点。我遇到了这个错误。你能帮忙吗?谢谢
  • Pss:如果有帮助,请考虑接受答案。

标签: python pandas dataframe compare analysis


【解决方案1】:

你需要:

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

【讨论】:

    【解决方案2】:

    IIUC:
    您需要将 franceFrance 进行比较,这需要对字符串进行规范化。我们可以制作所有字母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))
    

    【讨论】:

    • 非常巧妙地使用applymapbravo
    猜你喜欢
    • 2018-11-20
    • 2021-08-17
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多