如何通过应用功能在两列中交换值



i有一个具有各种列的数据集。我想通过应用功能来交换最低温度(TMIN(大于最高温度(TMAX(的值。

我要应用的功能:

def swap(a,b):
    if a >= b:
        return b,a
    else:
        return a,b

应用它:

cam.apply(lambda row: swap(row['tmin'], row['tmax']), axis=1)

当我检查代码是否有效时,我发现它没有更改任何内容 cam.query('tmin>tmax')

station       date  year  month  day  rain  tmin  tmax
126  garoua  1954-05-07  1954      5  127  NaN   35.6  33.8
2012 garoua  1959-07-06  1959      7  187  NaN   33.0  31.6

这是在tmin大于tmax的行上索引数据框的一种方式,并使用DataFrame.reindex在这两个列中交换值:

# columns to be used for indexing
cols = ["tmin","tmax"]
#indices where tmin is greater than tmax
ixs = df.tmin.gt(df.tmax)
# Where ixs is True, values are swapped
df.loc[ixs,cols] = df.loc[ixs, cols].reindex(columns=cols[::-1]).values
      station    date     year  month  day  rain  tmin  tmax
126   garoua  1954-05-07  1954      5  127   NaN  33.8  35.6
2012  garoua  1959-07-06  1959      7  187   NaN  31.6  33.0

或使用DataFrame.where

df[cols] = df[cols].where(df.tmin.lt(df.tmax), df[cols[::-1]].values)
      station    date     year  month  day  rain  tmin  tmax
126   garoua  1954-05-07  1954      5  127   NaN  33.8  35.6
2012  garoua  1959-07-06  1959      7  187   NaN  31.6  33.0
df['diff'] = df['tmin'] - df['tmax]
df = df[df['diff']>= 0]

您可以使用Graphlab模块来处理数据集中的列

import graphlab as gl
data=gl.SFrame('demo.csv')
data
if data['age'].all() > 0:
    data['temp'] = data['age']
    data['age'] = data['weight']
    data['weight'] = data['temp']
    data['temp'] = 1
data

我使用Graphlab模块来处理表的上述代码请参阅此图像,以了解有关代码

首先,我假设您正在使用Python软件包?

如果是这样,则应用功能返回结果。如果您想查看任何效果,您可能希望将此结果保存在原始列中。示例:

cam[['tmin', 'tmax']] = cam.apply(lambda row: swap(row['tmin'], row['tmax']), axis=1)

最新更新