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)