【问题标题】:Create conditional column in pandas在熊猫中创建条件列
【发布时间】:2019-05-09 11:03:33
【问题描述】:

我正在尝试在 pandas 中创建一个条件列。这是数据框的样子。

    data = [{"owner" : "john", "dog" : 'magie', "dog_is_fluffy" : 1},
            {"owner" : "john", "dog" : 'stellar', "dog_is_fluffy" : 0}, 
            {"owner" : "lisa", "dog" : 'mollie' , "dog_is_fluffy" : 0},
            {"owner" : "lisa", "dog" : 'rex', "dog_is_fluffy" : 0},
            {"owner" : "john", "dog" : 'luns', "dog_is_fluffy" : 1}]

    df = pd.DataFrame(data)

如您所见,我的数据显示了狗及其主人。我们也知道狗是否蓬松。我想创建两列fluffy_dogs_ownedowner_has_fluffy_dog

我要找的结果是:

data_result = [{"owner" : "john", "dog" : 'magie', "dog_is_fluffy" : 1, "fluffy_dogs_owned" : 2, "owner_has_fluffy_dog" : 1},
        {"owner" : "john", "dog" : 'stellar', "dog_is_fluffy" : 0, "fluffy_dogs_owned" : 2, "owner_has_fluffy_dog" : 1}, 
        {"owner" : "lisa", "dog" : 'mollie' , "dog_is_fluffy" : 0, "fluffy_dogs_owned" : 0, "owner_has_fluffy_dog" : 0},
        {"owner" : "lisa", "dog" : 'rex', "dog_is_fluffy" : 0, "fluffy_dogs_owned" : 0, "owner_has_fluffy_dog" : 0},
        {"owner" : "john", "dog" : 'luns', "dog_is_fluffy" : 1, "fluffy_dogs_owned" : 2, "owner_has_fluffy_dog" : 1}]

df_result = pd.DataFrame(data_result)

我考虑过使用df.groupby()np.where,但到目前为止我还无法使用。有任何想法吗?

【问题讨论】:

    标签: python-3.x pandas numpy where pandas-groupby


    【解决方案1】:

    使用GroupBy.transform 返回Series,其大小与原始Dataframe 相同,sum,然后比较不等于Series.ne 的列并强制转换为整数

    df['fluffy_dogs_owned'] = df.groupby('owner')['dog_is_fluffy'].transform('sum')
    df['owner_has_fluffy_dog'] = df['fluffy_dogs_owned'].ne(0).astype(int)
    

    或者Series.clip:

    df['owner_has_fluffy_dog'] = df['fluffy_dogs_owned'].clip(upper=1)
    

    print (df)
           dog  dog_is_fluffy owner  fluffy_dogs_owned  owner_has_fluffy_dog
    0    magie              1  john                  2                     1
    1  stellar              0  john                  2                     1
    2   mollie              0  lisa                  0                     0
    3      rex              0  lisa                  0                     0
    4     luns              1  john                  2                     1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 2017-10-17
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      相关资源
      最近更新 更多