5.pandas新增数据列

有的时候,表格自带的数据根本没有办法满足我们,我们经常会新加一列数据或者对原有的数据进行修改

还是接着上篇文章的数据进行操作

直接赋值

我想算一下每一天的温差

df.loc[:, 'wencha'] = df['wendu_max'] - df['wendu_min']
            wendu_min  wendu_max weather  fengji  wencha
data                                                    
2020-01-01          1         15       晴       1      14
2020-01-02          1         16      多云       2      15
2020-01-03          1         17      小雨       4      16
2020-01-04          4         18       阴       2      14
2020-01-05          1         19      大雨       1      18
2020-01-06          3         20      小雨       3      17
2020-01-07          1         21       晴       5      20
2020-01-08          1         22      多云       2      21
2020-01-09          1         23       阴       1      22
2020-01-10          0         24      小雨       3      24
2020-01-11          2         25      多云       4      23

这样就多了一列温差的数据

apply条件添加

我现在想加一个温度类型列,低于20度的是低温,20-24的是中温,25以上的是高温

def temperatureType(df):
    if df['wendu_max'] < 20:
        return '低温'
    elif 24 >= df['wendu_max'] >= 20:
        return '中温'
    else:
        return '高温'


df.loc[:, 'wendu_t'] = df.apply(temperatureType, axis=1)
            wendu_min  wendu_max weather  fengji  wencha wendu_t
data                                                            
2020-01-01          1         15       晴       1      14      低温
2020-01-02          1         16      多云       2      15      低温
2020-01-03          1         17      小雨       4      16      低温
2020-01-04          4         18       阴       2      14      低温
2020-01-05          1         19      大雨       1      18      低温
2020-01-06          3         20      小雨       3      17      中温
2020-01-07          1         21       晴       5      20      中温
2020-01-08          1         22      多云       2      21      中温
2020-01-09          1         23       阴       1      22      中温
2020-01-10          0         24      小雨       3      24      中温
2020-01-11          2         25      多云       4      23      高温

这里有几个点需要注意:

  • apply里面是函数名而不是函数名()
  • axis=1是列的匹配,比如是通过最高温度进行筛选,最高温度是其中一列
  • axis=0是索引匹配,如果是想通过日期来新加一列,就应该是axis=0

assign多列添加

我想将摄氏度转换成华氏度

df = df.assign(
    min_huas=lambda x: x['wendu_min'] * 9 / 5 + 32,
    max_huas=lambda x: x['wendu_max'] * 9 / 5 + 32,
)
            wendu_min  wendu_max weather  fengji  min_huas  max_huas
data                                                                
2020-01-01          1         15       晴       1      33.8      59.0
2020-01-02          1         16      多云       2      33.8      60.8
2020-01-03          1         17      小雨       4      33.8      62.6
2020-01-04          4         18       阴       2      39.2      64.4
2020-01-05          1         19      大雨       1      33.8      66.2
2020-01-06          3         20      小雨       3      37.4      68.0
2020-01-07          1         21       晴       5      33.8      69.8
2020-01-08          1         22      多云       2      33.8      71.6
2020-01-09          1         23       阴       1      33.8      73.4
2020-01-10          0         24      小雨       3      32.0      75.2
2020-01-11          2         25      多云       4      35.6      77.0

分组添加

如果高低温差大于15度,我就认为温差大,否则就是温差小

df.loc[df['wendu_max'] - df['wendu_min'] > 15, 'wencha'] = '温差大'
df.loc[df['wendu_max'] - df['wendu_min'] <= 15, 'wencha'] = '温差小'
            wendu_min  wendu_max weather  fengji wencha
data                                                   
2020-01-01          1         15       晴       1    温差小
2020-01-02          1         16      多云       2    温差小
2020-01-03          1         17      小雨       4    温差大
2020-01-04          4         18       阴       2    温差小
2020-01-05          1         19      大雨       1    温差大
2020-01-06          3         20      小雨       3    温差大
2020-01-07          1         21       晴       5    温差大
2020-01-08          1         22      多云       2    温差大
2020-01-09          1         23       阴       1    温差大
2020-01-10          0         24      小雨       3    温差大
2020-01-11          2         25      多云       4    温差大

原文地址:https://www.cnblogs.com/jevious/p/13375774.html