根据条件(使用熊猫)将值从一列复制到另一列

jsFM2300

我有一个数据框,如下所示...

Month    JUN    JUL    AUG    SOI_Final    JUN_bool    JUL_bool    AUG_bool
Aug      1.2    0.8    0.1    NaN          False       False       True
Aug      0.2    0      -2     NaN          False       False       True
Jun      3.2    -2.5   0.6    NaN          True        False       False
Jul      2.2    -0.7   -0.8   NaN          False       True        False

我想要做的是对表中的每一行,在“月”列中查找月份,然后将“ JUN”,“ JUL”或“ AUG”列中的相应值分配给“ SOI_Final”。例如,如果给定行的“月”列为“六月”,则该行的“ SOI_Final”将从列“ JUN”中获取值。这是我到目前为止获得的代码...

df_merged['JUN_bool'] = (df_merged['Month'] == 'Jun')
df_merged['JUL_bool'] = (df_merged['Month'] == 'Jul')
df_merged['AUG_bool'] = (df_merged['Month'] == 'Aug')

if df_merged['JUN_bool'] is True:
    df_merged['SOI_Final']=df_merged['JUN']
elif df_merged['JUL_bool'] is True:
    df_merged['SOI_Final']=df_merged['JUL']
elif df_merged['AUG_bool'] is True:
    df_merged['SOI_Final']=df_merged['AUG']  
else:
    df_merged['SOI_Final']=np.NaN

我的数据框仅显示“ SOI_Final”的NaN,而未获取正确的值。我为这3个月中的每个月创建了一个布尔列,并且仅在bool值为“ True”时才应复制正确的月度值。有人对我在这里可能会缺少什么有任何建议吗?

谢谢杰夫

圣杯

这里的问题是,每个布尔列(即df_merged['JUN_bool']系列)都比较所以比较is算符将永远不会返回just True,因此将everything分配为nan。

如果months值与列对齐,则可以大写并使用堆栈方法,仅当索引唯一时,这是三个月的示例:

np.random.seed(10)
months = np.random.choice(['Aug', 'Jun', 'Jul'], 100)
JUN = np.random.random(100)
JUL = np.random.random(100)
AUG = np.random.random(100)
index = [i for i in range(1900, 2000)]

data = pd.DataFrame(dict(months=months, JUN=JUN, JUL=JUL, AUG=AUG), index=index)

对months列和布尔值掩码进行修改:

data['months'] = data.months.str.upper()

df2 = data[['JUN', 'JUL', 'AUG']].stack(
    ).reset_index(level=1)

df2.rename(columns={0: 'month_value'}, inplace=True)

df2['months'] = data['months']
SOI = df2[df2['months'] == df2['level_1']].month_value
data['SOI'] = SOI

data.head(4)

#       months  JUN         JUL         AUG         SOI
# 1900  JUN     0.637952    0.933852    0.384843    0.637952
# 1901  JUN     0.372520    0.558900    0.820415    0.372520
# 1902  AUG     0.002407    0.672449    0.895022    0.895022

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Python熊猫根据条件将行值复制到另一列

将条件值从一列复制到另一列

将满足条件的单个值从一列复制到另一列

使用Pandas将值从一列复制到另一列

如何根据R中的条件将数据从一列复制到另一列?

有条件地将值从一列复制到另一列

如果满足条件,pandas将值从一列复制到另一列

将时间戳值从一列复制到另一列失败

如何将值从一列复制到另一列?

根据条件将所有值复制到另一列

根据另一变量将值从一列复制到其他多个列

如何在熊猫中将特定值从一列复制到另一列

当新列值为空时,将值从一列复制到另一列

根据行内容将值从一列复制到其他列

将值从一列复制到同一表中的另一列

检查上一行的值以将数据从一列复制到另一列

将值从一列复制到另一条sql

在 Google Scripts 中将值从一列复制到另一列

将数据从一列复制到另一列

SQL将数据从一列复制到另一列

将数据从一列复制到另一列

将因子级别顺序从一列复制到另一列

将一列从一个熊猫数据帧复制到另一个

根据另一列不为 NULL,将数据从一行复制到同一列中的另一行

根据条件将值从一列移动到另一列

根据属性将列表对象从一个列表复制到另一列表

Power Shell将一列的值复制到另一列表中的一列

将值从一个数据框列复制到另一列

根据Pandas中的特定条件将值从一列复制到同一行中的其他列