【问题标题】:two pandas columns have identical values written differently两个 pandas 列具有相同的值,但写法不同
【发布时间】:2018-10-02 15:37:49
【问题描述】:

我有一个 DataFrame,其中多个列包含相同的数据,但存储方式不同。

例如,一列全是承运人名称(AA 代表美国航空公司等),另一列全是承运人 ID。

如何快速检查这两列是否实际上填充了相同的信息(每个 Carrier 确实只有一个 ID?)目标是安全地删除两列之一?

到目前为止,我有以下内容:

#for each carrier
for carrier in data.CARRIER.unique():
    #print all the different AIRLINE_ID that appear when we subset the data for this carrier
    print(carrier, data[ data['CARRIER'] == carrier].AIRLINE_ID.unique())

这为我返回了每个运营商的每个唯一 ID 的列表,并且由于每个 CARRIER 只有一个 ID 值,我可以安全地删除其中一列。

我只是想知道是否有一个 pandas 函数可以在没有循环和检查的情况下执行此操作。 (因为我在某处读到过,每当您开始编写代码来操作 DF 时,某个函数可能存在于某处^^)

感谢您的宝贵时间

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用groupby、nunique和all:

    (df.groupby('ID')['CARRIER'].nunique().eq(1)).all()
    

    如果每个ID 只有一个CARRIER,这将返回True,否则返回False。

    例如:

    当每个ID 有一个CARRIER 时

    >>> df
       ID  CARRIER
    0   1   AA
    1   2   BB
    2   3   CC
    3   1   AA
    4   2   BB
    
    >>> (df.groupby('ID')['CARRIER'].nunique().eq(1)).all()
    True
    

    但另一方面,当每个ID 有多个不同的名称时(这里,ID 2 有 2 个不同的CARRIER):

    >>> df
       ID   CARRIER
    0   1   AA
    1   2   BB
    2   3   CC
    3   1   AA
    4   2   DD
    
    >>> (df.groupby('ID')['CARRIER'].nunique().eq(1)).all()
    False
    

    您还可以使用以下方法查看哪个ID 具有多个CARRIER 值:

    >>> df.groupby('ID')['CARRIER'].nunique()
    ID
    1    1
    2    2
    3    1
    Name: Name, dtype: int64
    

    这表明 ID 2 有 2 个唯一的 CARRIER 值

    【讨论】:

    • 您好,您好!非常感谢!
    • 希望对您有所帮助:)
    • 确实如此,我知道 groupby 的存在,但从来没有一个可以应用它的实例(我想我不知道我们可以这样使用它)。而且我知道.unique(),但不知道.nunique(),所以我一直在做len(data.unique())……所以今天学到了两件事,还不错^^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2020-02-02
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多