这个问题似乎是重复的,之前已经回答过,但这有点棘手。
让我们说我有以下数据框。
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。
有人可以帮忙吗?
答案 0 :(得分:2)
将GroupBy.transform
与GroupBy.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