我在pandas数据框中有以下示例表。
Col1 Col2 Col3 Col4 Col5
No 4/30/2018 No
No 4/30/2018 No
Await AIR 7/15/2015 Yes 4/30/2018 No
Await LER 7/15/2015 No 4/30/2018 No
Await TEE 7/15/2015 No 4/30/2018 No
我想实现的逻辑如下: 如果Col3为'No'且Col5为'No',我想删除Col1中的字符串(如果它已经不是空白)并将其留空。
以下是我想要的输出表:
Col1 Col2 Col3 Col4 Col5
No 4/30/2018 No
No 4/30/2018 No
Awaiting 7/15/2015 Yes 4/30/2018 No
7/15/2015 No 4/30/2018 No
7/15/2015 No 4/30/2018 No
我认为我有if语句但不知道如何编写逻辑的其余部分:
if df_EVENT5_21['shipping_filter'] == 'No' and df_EVENT5_21['shipping_filter_2'] == 'No':
...
答案 0 :(得分:2)
使用pd.DataFrame.mask
df[['Col1']].mask(df[['Col3', 'Col5']].eq('No').all(1), '')
Col1
0
1
2 Await AIR
3
4
我们可以使用pd.DataFrame.assign
df.assign(
**df[['Col1']].mask(df[['Col3', 'Col5']].eq('No').all(1), '')
)
Col1 Col2 Col3 Col4 Col5
0 No 4/30/2018 No
1 No 4/30/2018 No
2 Await AIR 7/15/2015 Yes 4/30/2018 No
3 7/15/2015 No 4/30/2018 No
4 7/15/2015 No 4/30/2018 No
或pd.DataFrame.update
df.update(df[['Col1']].mask(df[['Col3', 'Col5']].eq('No').all(1), ''))
df
Col1 Col2 Col3 Col4 Col5
0 No 4/30/2018 No
1 No 4/30/2018 No
2 Await AIR 7/15/2015 Yes 4/30/2018 No
3 7/15/2015 No 4/30/2018 No
4 7/15/2015 No 4/30/2018 No
或者没有双括号
df.assign(
Col1=df.Col1.mask(df[['Col3', 'Col5']].eq('No').all(1), '')
)
或者
df.update(df.Col1.mask(df[['Col3', 'Col5']].eq('No').all(1), ''))
df
答案 1 :(得分:1)
df['Col1'] = np.where( ((df['Col3 '] == 'No') & (df['Col5'] == 'No']) ), '', df['Col1'])
答案 2 :(得分:1)
一种方法是使用带掩码的.loc
访问器:
df = pd.DataFrame({'Col1': ['', '', 'AWait AIR', 'Await LER', 'Await TEE'],
'Col2': ['', '', '7/15/2015', '7/15/2015', '7/15/2015'],
'Col3': ['No', 'No', 'Yes', 'No', 'No'],
'Col4': ['4/30/2018', '4/30/2018', '4/30/2018', '4/30/2018', '4/30/2018'],
'Col5': ['No', 'No', 'No', 'No', 'No']})
df.loc[(df[['Col3', 'Col5']] == 'No').all(axis=1), 'Col1'] = ''
# Col1 Col2 Col3 Col4 Col5
# 0 No 4/30/2018 No
# 1 No 4/30/2018 No
# 2 AWait AIR 7/15/2015 Yes 4/30/2018 No
# 3 7/15/2015 No 4/30/2018 No
# 4 7/15/2015 No 4/30/2018 No
<强>解释强>
此解决方案的灵感来自于创建布尔数组的numpy
逻辑:
(df[['Col3', 'Col5']].values == 'No').all(axis=1)
# array([ True, True, False, True, True], dtype=bool)