首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将掩码值分配给pandas中的不同行

将掩码值分配给pandas中的不同行
EN

Stack Overflow用户
提问于 2021-10-26 05:37:19
回答 1查看 34关注 0票数 1

我有一个熊猫数据框

代码语言:javascript
运行
复制
df =     code       mapper       version  country  range    month              value
1       ABC321       ABC          Alpha     USA     High   2021-10              8.0
6       ABC321       ABC          Alpha     USA     High   2021-11              1.0
2       ABC321       PQS          Beta      IND     LOW    2021-10              0.0
3       ABC321       TRR          Delta     MEX     LOW    2021-10              1.0
4       ABC321       TRR          Delta     MEX     LOW    2021-11              3.0

我根据条件掩码行,并将值设为零。

代码语言:javascript
运行
复制
mask = (
    (df.mapper == 'ABC')
    & (df.version == 'Alpha')
    & (df.country == 'USA')
    & (df.range == 'High')
    & (df.month == '2021-10')
)
df.value = df.mask(mask, 0.0).value

这使得df成为

代码语言:javascript
运行
复制
          code       mapper       version  country  range    month              value
1       ABC321       ABC          Alpha     USA     High   2021-10              0.0
6       ABC321       ABC          Alpha     USA     High   2021-11              1.0
2       ABC321       PQS          Beta      IND     LOW    2021-10              0.0
3       ABC321       TRR          Delta     MEX     LOW    2021-10              1.0
4       ABC321       TRR          Delta     MEX     LOW    2021-11              3.0

现在我想将掩码值"8“更新为"0”添加到下个月,

代码语言:javascript
运行
复制
expected_output =  code       mapper       version  country  range    month              value
1       ABC321       ABC          Alpha     USA     High   2021-10              0.0
6       ABC321       ABC          Alpha     USA     High   2021-11              9.0
2       ABC321       PQS          Beta      IND     LOW    2021-10              0.0
3       ABC321       TRR          Delta     MEX     LOW    2021-10              1.0
4       ABC321       TRR          Delta     MEX     LOW    2021-11              3.0


EDIT

There won't be duplicate rows
EN

回答 1

Stack Overflow用户

发布于 2021-10-26 05:49:39

一种想法是将值转换为月份期间,因此对于匹配上个月或下个月,仅使用+ 1- 1

代码语言:javascript
运行
复制
df['month'] = pd.to_datetime(df['month']).dt.to_period('m')

mask = (
    (df.mapper == 'ABC')
    & (df.version == 'Alpha')
    & (df.country == 'USA')
    & (df.range == 'High')
    & (df['month'] == '2021-10')
)

mask1 = (
    (df.mapper == 'ABC')
    & (df.version == 'Alpha')
    & (df.country == 'USA')
    & (df.range == 'High')
    & (df['month'] - 1 == '2021-10')
)

df.loc[mask1, 'value'] += next(iter(df.loc[mask, 'value']), 0)
df.loc[mask, 'value'] = 0


print (df)
     code mapper version country range    month  value
1  ABC321    ABC   Alpha     USA  High  2021-10    0.0
6  ABC321    ABC   Alpha     USA  High  2021-11    9.0
2  ABC321    PQS    Beta     IND   LOW  2021-10    0.0
3  ABC321    TRR   Delta     MEX   LOW  2021-10    1.0
4  ABC321    TRR   Delta     MEX   LOW  2021-11    3.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69717936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档