我想根据指标列更改列天数(即日期时间列),即当指标等于DTM或AMC时,我想在天数列中添加1天。
Index(['COUNTRY', 'DYSTOPIA RESIDUAL', 'ECONOMY GDP PER CAPITA', 'FAMILY',
'FREEDOM', 'GENEROSITY', 'HAPPINESS RANK', 'HAPPINESS SCORE',
'HEALTH LIFE EXPECTANCY', 'LOWER CONFIDENCE INTERVAL', 'STANDARD ERROR',
'TRUST GOVERNMENT CORRUPTION', 'UPPER CONFIDENCE INTERVAL',
'WHISKER HIGH', 'WHISKER LOW', 'YEAR', 'REGION_y', 'REGION_x'],
dtype='object')
所以结果看起来像这样:
import pandas as pd
df = pd.DataFrame({'days': [1, 2, 3],
'indicator': ['BMO', 'DTM','AMC']})
答案 0 :(得分:1)
使用boolean mask:
df['days'] += (df.indicator.eq('AMC') | df.indicator.eq('DTM'))
print(df)
输出
days indicator
0 1 BMO
1 3 DTM
2 4 AMC
您也可以使用isin:
df['days'] += df.indicator.isin(('AMC', 'DTM'))
print(df)
您可以直接添加布尔掩码,因为在Python中,布尔值是整数(0, 1)
。
答案 1 :(得分:1)
将np.where
与isin
一起使用:
df['days'] = np.where(df['indicator'].isin(['DTM', 'AMC']), df['days'].add(1), df['days'])
days indicator
0 1 BMO
1 3 DTM
2 4 AMC
答案 2 :(得分:1)
使用Series.mask:
df['days']=df['days'].mask(df['indicator'].isin(['DTM','AMC']),df['days']+1)
df['days']=df['days'].where(~df['indicator'].isin(['DTM','AMC']),df['days']+1)
输出
#print(df)
days indicator
0 1 BMO
1 3 DTM
2 4 AMC