根据其他列值熊猫将值分配给新列

时间:2020-04-17 11:13:06

标签: pandas dataframe

这个问题似乎是重复的,之前已经回答过,但这有点棘手。

让我们说我有以下数据框。

Id     Col_1
1     aaa 
1     ccc 
2     bbb 
3     aa  

基于值列Id和Col_1,我要创建新列并通过检查Col_1中是否存在aa来分配新值。并且应基于Id的含义应用此值,如果它们具有相同的ID。

预期结果:

Id   Col_1  New_Column
1     aaa    aa
1     ccc    aa
2     bbb    
3     aa    aa

我尝试过这个:

df['New_Column'] = ((df['Id']==1) | df['Col_1'].str.contains('aa')).map({True:'aa', False:''})

结果是

Id   Col_1  New_Column
1     aaa    aa
1     ccc    
2     bbb    
3     aa    aa

但是如上所述,我想在新列上也为aa分配相同的ID。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

GroupBy.transformGroupBy.any一起使用,以获取至少具有一个# naive SELECT * FROM mytable0001; SELECT * FROM mytable0002; SELECT * FROM mytable0003; ... SELECT * FROM mytable9999; # wannabe SELECT * FROM foo (SELECT table_name FROM information_schema.tables) AS foo limit 5; 的所有组的掩码:

aaa

替代Series.isin并通过mask = df['Col_1'].str.contains('aa').groupby(df['Id']).transform('any') 过滤Id值:

aa

mask = df['Id'].isin(df.loc[df['Col_1'].str.contains('aa'), 'Id'])

编辑:

df['New_Column'] = np.where(mask, 'aa','')
print (df)
   Id Col_1 New_Column
0   1   aaa         aa
1   1   ccc         aa
2   2   bbb           
3   3    aa         aa