熊猫数据框中的条件更改

时间:2019-10-13 21:59:24

标签: python pandas datetime

我想根据指标列更改列天数(即日期时间列),即当指标等于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']})

3 个答案:

答案 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.whereisin一起使用:

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)

Series.where

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