如何通过应用函数交换两列中的值?

2024-10-01 15:40:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含不同列的数据集。我想通过应用一个函数来交换最小温度(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

Tags: 数据函数returnifdefnan温度else
3条回答
df['diff'] = df['tmin'] - df['tmax]
df = df[df['diff']>= 0]

首先,我假设您使用的是Python包Pandas?你知道吗

如果是,apply函数将返回结果。如果希望看到任何效果,可能需要将此结果保存在原始列中。示例:

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

这里有一种方法可以索引tmin大于tmax的行上的数据帧,并使用^{}交换两列中的值:

# 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

或使用^{}

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

相关问题 更多 >

    热门问题