微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有pandas / python方法基于3列条件来更改行的值?

如何解决是否有pandas / python方法基于3列条件来更改行的值?

我正在使用一个类似于以下表格的表格:

   ID    NAME    DIRECTION    FOUND    LOST
    A     Rock      up           7        12
    A     Sap      down         15        17  
    A     Leaf      up          18        19
    B     Sap       up           5         9  
    B     Leaf      up          11        20
    B     Rock     down         22        23  
    C     Rock      up          12        14
    C     Sap      down         17        21  

对于每个ID,我需要检查NAME在Sap中的位置,然后需要检查DIRECTION。如果树液方向=向下,那么我需要反转该ID的方向值。理想的输出如下:

   ID    NAME    DIRECTION    FOUND    LOST
    A     Rock    down           7        12
    A     Sap      up           15        17  
    A     Leaf    down          18        19
    B     Sap      up            5         9  
    B     Leaf     up           11        20
    B     Rock    down          22        23  
    C     Rock    down          12        14
    C     Sap      up           17        21  

我从group_by()方法开始,然后要遍历各个组。我只能打印键和值对,但不能对其进行迭代。

for name,group in groups:
     print(name,group)

('A',ID  NAME DIRECTION  FOUND  LOST
0  A  Rock         +      7    12
1  A   Sap         -     15    17
2  A  Leaf         +     18    19)
('B',ID  NAME DIRECTION  FOUND  LOST
3  B   Sap         +      5     9
4  B  Leaf         +     11    20
5  B  Rock         -     22    23)
('C',ID  NAME DIRECTION  FOUND  LOST
6  C  Rock         +     12    14
7  C   Sap         -     17    21)

解决方法

您可以不进行分组而实现:

arr = df.loc[df['NAME'].str.contains('Sap') & df['DIRECTION'].eq('down'),'ID'].unique()
mask = df['ID'].isin(arr)
df.loc[mask,'DIRECTION'] = df.loc[mask,'DIRECTION'].replace(['up','down'],['down','up'])
,

这就是我要做的工作:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class ThemeService {
  body = document.body;

  constructor() { }

  changeLight() {
    this.body.classList.replace('light','dark');
  }

  changeDark() {
    this.body.classList.replace('dark','light');
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。