[英]Replace values within a column if a certain condition is met using Python
我有一個數據集,我想根據特定條件映射值並覆蓋現有列中的值。
數據
ID Date Location Used Status
AA Q121 NY 20 ok
AA Q221 NY 50 ok
AA Q321 NY 10 ok
BB Q121 CA 1 ok
BB Q221 CA 0 yes
BB Q321 CA 500 yes
BB Q421 CA 700 no
CC Q121 AZ 50 no
期望的
ID Date Location Used Status
AA Q121 NY closed
AA Q221 NY closed
AA Q321 NY closed
BB Q121 CA 1 ok
BB Q221 CA 0 yes
BB Q321 CA 500 yes
BB Q421 CA 700 no
CC Q121 AZ 50 no
正在做
df['Used'] = np.where(((df.ID == 'AA') & (df.Date >= 'Q121')), '', df['Used'])
df['Status'] = np.where(((df.ID == 'AA') & (df.Date >= 'Q121')), 'closed', '')
上面的腳本將 'ok' 替換為 'closed' ,但是,它也會刪除列中的剩余值。 任何建議表示贊賞。
這應該工作 -
df.loc[(df.ID == 'AA') & (df.Date >= 'Q121'), 'Used'] = ''
df.loc[(df.ID == 'AA') & (df.Date >= 'Q121'), 'Status'] = 'closed'
請使用問題中所述的 np.where 查看答案:
d = {
'ID': ['AA', 'AA', 'AA', 'BB', 'BB'],
'Date': ['Q121', 'Q221', 'Q321', 'Q121', 'Q221'],
'Location': ['NY', 'NY', 'NY', 'CA', 'CA'],
'Used': [20, 50, 10, 1, 0],
'Status': ['ok', 'ok', 'ok', 'ok', 'yes']
}
df = pd.DataFrame(d)
idx = np.where((df.ID == 'AA') & (df.Date >= 'Q121'))[0].tolist()
df.loc[idx, 'Used'] = np.nan
df.loc[idx, 'Status'] = 'Closed'
您可以使用申請:
df['Used'],df['Status'] = zip(*df.apply(lambda x: ('', 'closed') if (x.ID == 'AA') and (x.Date >= 'Q121') else (x.Used, x.Status), axis = 1))
df.loc[(df['ID'].eq('AA')) & (df['Date'] >= 'Q121'), 'Status'] = 'closed'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.