这个问题之前似乎已经重复并回答过,但这有点棘手。
可以说我有以下数据框。
Id Col_1
1 aaa
1 ccc
2 bbb
3 aa
基于值列Id和Col_1,我要创建新列并通过检查aa
Col_1中是否存在来分配新值。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。
有人可以帮忙吗?
使用GroupBy.transform
与GroupBy.any
用于GET面膜至少一个所有组aaa
:
mask = df['Col_1'].str.contains('aa').groupby(df['Id']).transform('any')
通过以下方法替代Series.isin
和过滤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
编辑:
mask1 = df['Id'].isin(df.loc[df['Col_1'].str.contains('aa'), 'Id'])
mask2 = df['Id'].isin(df.loc[df['Col_1'].str.contains('bb'), 'Id'])
df['New_Column'] = np.select([mask1, mask2], ['aa','bb'],'')
print (df)
Id Col_1 New_Column
0 1 aaa aa
1 1 ccc aa
2 2 bbb bb
3 3 aa aa
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句