pandas 根据是否存在文本为列分配值

bq3bfh9z  于 2023-09-29  发布在  其他
关注(0)|答案(1)|浏览(91)

我有一个数据框:
| 水果|颜色||
| --|--|--|
| 苹果|“绿色”||
| 苹果|“大而绿色”||
| 苹果|“红色”||
| 香蕉|“黄色”||
| 香蕉|“黄色”||
| 香蕉|“又小又黄”||
我想为所有df ['Fruit'] == 'apple'创建第三列,名为'Green',它是二进制的,并且对于'Color'列中包含字符串'green'的每个值都有1,对于所有不包含字符串'绿色'的值都有0,并且对于每个值df ['Fruit'] == 'Banana',df ['Green] == NA。
| 水果|颜色|绿色|
| --|--|--|
| 苹果|“绿色”| 1 |
| 苹果|“大而绿色”| 1 |
| 苹果|“红色”| 0 |
| 香蕉|“黄色”|NA|
| 香蕉|“黄色”|NA|
| 香蕉|“又小又黄”|NA|
当我运行这个时,我得到一个错误:
df['Green'] = np.where((df['Fruit'] == 'apple')&(df['Color].str.lower().str.contains('green')== True),1,0)

lqfhib0f

lqfhib0f1#

创建布尔掩码,然后使用带loc的布尔索引来赋值

m1 = df['Fruit'].eq('apple')
m2 = df['Color'].str.contains('(?i)green')
df.loc[m1, 'Green'] = (m1 & m2).astype('int')
Fruit                  Color  Green
0   apple             'is green'    1.0
1   apple        'big and Green'    1.0
2   apple               'is red'    0.0
3  banana               'yellow"    NaN
4  banana            'is yellow'    NaN
5  banana  'is small and yellow"    NaN

相关问题