我一直在尝试让我的代码工作,但我在这里遇到了一些麻烦。 如果有人可以帮助我,那就太好了
东风
Col1 Col2
2017-01-01 Coffee
2017-01-01 Muffin
2017-01-01 Donut
2017-01-01 Toast
2017-01-01
2017-01-01
如何更改 Col2,以便每个不是咖啡、松饼或空的值都变为"其他"?
Col1 Col2
2017-01-01 Coffee
2017-01-01 Muffin
2017-01-01 Other
2017-01-01 Other
2017-01-01
2017-01-01
编辑:
df.loc[~df.Col2.isin(['Coffee','Muffin']), 'Col2'] = 'Other'
^这就是我现在所处的位置,但是如何在 isin 中添加空语句
你快到了。如果您正在使用 NaN,则需要与 isnull
进行额外检查。创建掩码并使用 loc
- 设置值
m = ~(df.Col2.isin(['Coffee', 'Muffin']) | df.Col2.isnull())
df.loc[m, 'Col2'] = 'Other'
df
Col1 Col2
0 2017-01-01 Coffee
1 2017-01-01 Muffin
2 2017-01-01 Other
3 2017-01-01 Other
4 2017-01-01 NaN
5 2017-01-01 NaN
或者,如果它们是空白(空字符串,不是 NaN - 它们是不同的!(,请对第二个条件执行相等比较 -
m = ~(df.Col2.isin(['Coffee', 'Muffin']) | df.Col2.eq(''))
以下是np.where
/pd.Series.where
/pd.Series.mask
的更多可能性 -
df.Col2 = np.where(m, 'Other', df.Col2)
或
df.Col2 = df.Col2.where(~m, 'Other')
或
df.Col2 = df.Col2.mask(m, 'Other')
df
Col1 Col2
0 2017-01-01 Coffee
1 2017-01-01 Muffin
2 2017-01-01 Other
3 2017-01-01 Other
4 2017-01-01 NaN
5 2017-01-01 NaN
df = pd.DataFrame({'Col1':['2017-01-01','2017-01-01','2017-01-01','2017-01-01','2017-01-01','2017-01-01'],
'Col2':['Coffee','Muffin','Donut','Toast',pd.np.nan,pd.np.nan]})
conditions = (df['Col2'] != 'Coffee') & (df['Col2'] != 'Muffin') & (df['Col2'].isnull() == False)
df['Col2'][conditions] = 'Other'
isin
可以包含np.nan
df.loc[df.Col2.isin(['Donut', 'Toast',np.nan]),'Col2']='Other'
df
Out[112]:
Col1 Col2
0 2017-01-01 Coffee
1 2017-01-01 Muffin
2 2017-01-01 Other
3 2017-01-01 Other
4 2017-01-01 Other
5 2017-01-01 Other