如何在Pandas中创建指定条件列?含数据示例与预期结果
嘿,我来帮你搞定这个Pandas的条件列问题!你想要新增的两列其实用groupby+transform就能轻松实现,不用复杂的操作,一起来看具体步骤:
完整解决方案
import pandas as pd import numpy as np # 原始数据 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_owned列:统计每个主人拥有的蓬松狗狗总数 df['fluffy_dogs_owned'] = df.groupby('owner')['dog_is_fluffy'].transform('sum') # 新增owner_has_fluffy_dog列:标记主人是否有至少一只蓬松狗狗 df['owner_has_fluffy_dog'] = np.where(df['fluffy_dogs_owned'] > 0, 1, 0) # 查看结果 print(df)
代码细节解释
fluffy_dogs_owned列:groupby('owner')按主人分组后,transform('sum')会把分组统计的蓬松狗狗总数广播回原DataFrame的每一行,所以同一个主人的所有记录都会显示相同的总数,完美匹配你的需求。owner_has_fluffy_dog列:用np.where做简单的条件判断——如果fluffy_dogs_owned大于0(即有至少一只蓬松狗)就返回1,否则返回0,正好实现你要的布尔标识效果。
运行这段代码后,得到的结果就和你预期的df_result完全一致啦!
内容的提问来源于stack exchange,提问作者Rachel
相关产品推荐
相关产品推荐

