【问题标题】:compare two pandas columns of mixed data datatypes比较混合数据数据类型的两个 pandas 列
【发布时间】:2018-03-07 11:30:33
【问题描述】:

我有一个如下的数据框,A 列和Refer 具有str、float 和int 类型的值。如果两个值相同则通过或失败,我必须比较并创建一个新列。如果所有值字符串数据类型,但在比较列 A 中的任何数值之前必须四舍五入,如果它是小数并以 .0 结尾,则第 3 行中的示例“1.0”必须在与引用比较之前更改为“1”,这是非常简单的专栏

       A  Refer
0    usa    usa
1      1      1
2  india    usa
3    1.0      1
4    1.1    1.1
5    1.1    1.2
6  0.888  0.898
7  0.888  0.888

我期待的输出是:

       A  Refer verdict
0    usa    usa    pass
1      1      1    pass
2  india    usa    fail
3    1.0      1    pass
4    1.1    1.1    pass
5    1.1    1.2    fail
6  0.888  0.898    fail
7  0.888  0.888    pass

所以我想创建一个函数,以便它检查每一行,如果行值是数字,那么它将检查类型是浮点数/整数。如果它是浮点数并以 '.0' 结尾,则树干/删除小数,否则继续使用平面值。 如果行值是字符串,则直接进行比较。

谁能帮忙

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    IIUC,pandas 有很多内置函数

    更新to_numeric

    df.apply(pd.to_numeric,errors='ignore',axis=1).nunique(1).eq(1).map({True:'Pass',False:'Fail'})
    Out[272]: 
    0    Pass
    1    Pass
    2    Fail
    3    Pass
    4    Pass
    5    Fail
    6    Fail
    7    Pass
    dtype: object
    

    分配回来后

    df['verdict']=df.apply(pd.to_numeric,errors='ignore',axis=1).nunique(1).eq(1).map({True:'Pass',False:'Fail'})
    df
    Out[274]: 
           A  Refer verdict
    0    usa    usa    Pass
    1      1      1    Pass
    2  india    usa    Fail
    3    1.0      1    Pass
    4    1.1    1.1    Pass
    5    1.1    1.2    Fail
    6  0.888  0.898    Fail
    7  0.888  0.888    Pass
    

    【讨论】:

    • 但第三行必须通过,因为在 A 列中,值 1.0 必须更改为 1 并与 1 进行比较。
    • @PythonSpark 检查更新,很抱歉造成混乱
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多