【问题标题】:Change pandas.Series values based on a particular level of its MultiIndex根据其 MultiIndex 的特定级别更改 pandas.Series 值
【发布时间】:2023-02-09 19:07:14
【问题描述】:

我有一个 pd.Series 如下:

WORKER   DATE         PROFILE  HOURS
0000123  2023-01-30   R01      8.0
0000123  2023-01-31   R01      8.0
0000123  2023-02-01   T05      8.0
0000123  2023-02-02   T09      8.0
...

MultiIndex([('0000123','2023-01-30','R01'),
            ('0000123','2023-01-30','R01'),
            ('0000123','2023-01-30','R01'),
            ('0000123','2023-01-30','R01')],
           names=['WORKER', 'DATE', 'PROFILE'], lenght=839)

该系列来自其他脚本部分,基本上是 df.groupby 的结果,按这些值分组和汇总。

我想要 - 可能 - 一行/几行代码:

IF (HOURS == 8) AND (PROFILE == T05 OR T09)
THEN HOURS == 7

到现在为止,我尝试了很多 pandas 方法,但总是运行出错。

我认为我的错误是因为 PROFILE 是一个多索引级别,但不知道如何在索引和值上管理这种双重条件。

【问题讨论】:

    标签: python-3.x pandas series multi-index


    【解决方案1】:

    使用:

    m = df['HOURS'].eq(8) & df.index.get_level_values('PROFILE').isin(['T05','T06'])
    
    df.loc[m, 'HOURS'] = 7
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 2016-11-28
      相关资源
      最近更新 更多