我有一个包含多个物质列的数据框,如下所示:
import random
values = ['oil', 'gas', 'water']
modifier = ['dirty', 'crude', 'fuel']
wordzip = [modifier, values]
data = [[wordzip[0][random.randint(0,2)] + ' ' + wordzip[1][random.randint(0,2)] for c in wordzip[0]] for i in range(7)]
pd.DataFrame(data = data, columns = ['A', 'B', 'C'])
A B C
0 dirty gas crude oil dirty water
1 dirty water fuel gas dirty gas
2 dirty water fuel gas dirty oil
3 fuel oil crude water crude gas
4 dirty water fuel oil dirty water
5 crude oil fuel water dirty oil
6 fuel water crude gas crude water
我想创建一个新列,这些列中的值包含单词“ oil”。因此,最终的df应该如下所示:
A B C D
0 dirty gas crude oil dirty water crude oil
1 dirty water fuel gas dirty gas NaN
2 dirty water fuel gas dirty oil dirty oil
3 fuel oil crude water crude gas fuel oil
4 dirty water fuel oil dirty water fuel oil
5 crude oil fuel water dirty oil crude oil
6 fuel water crude gas crude water NaN
我试过了,df[['A', 'B', 'C']].apply(lambda x: x.str.contains('oil'))
但是返回的是布尔型数据框,而不是值本身。
让我们使用stack
+ extract
:
df['D'] = df.stack().str.extract(r'(.* oil)').groupby(level=0).first()[0]
df
A B C D
0 dirty gas crude oil dirty water crude oil
1 dirty water fuel gas dirty gas NaN
2 dirty water fuel gas dirty oil dirty oil
3 fuel oil crude water crude gas fuel oil
4 dirty water fuel oil dirty water fuel oil
5 crude oil fuel water dirty oil crude oil
6 fuel water crude gas crude water NaN
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句