Pandas图-如果行中的值部分匹配,则更新列值

liwlm1x9  于 2022-11-27  发布在  其他
关注(0)|答案(2)|浏览(132)

我有一个与下面给定的 Dataframe 类似的 Dataframe 。我需要在Validated列中添加一个与以下条件匹配的值:如果有多个数据列在State、ColorName和Code数据行中具有相同的值,则至少有一个数据列在Value数据行中应该包含正值。如果Value数据行中没有包含正值的数据列,我需要在所有相符数据列的Validated数据行中加入"Invalid"。有没有方法可以在不重复每一个数据列的情况下执行此动作?

State     ColorName    Code    Value      Validated
Arizona    Yellow        A       50 
Alabama    Orange        A      150 
Arkansas   Red           B      -500    
Kentuky    Green         M      -40 
Ohio       Blue          X      100
Alabama    Orange        A      -30 
Arizona    Yellow        A      100 
California Blue          C      100 
California Blue          C     -100 
Arkansas   Red           B      500 
Ohio       Yellow        X      100 
California Blue          C      100
sq1bmfud

sq1bmfud2#

假设您需要多个值至少一个正数

g = (df.assign(flag=df['Value'].gt(0))
       .groupby(['State', 'ColorName', 'Code'])
     )

m1 = g.transform('size').gt(1)
m2 = g['flag'].transform('any')

df['Validated'] = np.where(m1&m2, 'Valid', 'Invalid')

输出量:

State ColorName Code  Value Validated
0      Arizona    Yellow    A     50     Valid
1      Alabama    Orange    A    150     Valid
2     Arkansas       Red    B   -500     Valid
3      Kentuky     Green    M    -40   Invalid
4         Ohio      Blue    X    100   Invalid
5      Alabama    Orange    A    -30     Valid
6      Arizona    Yellow    A    100     Valid
7   California      Blue    C    100     Valid
8   California      Blue    C   -100     Valid
9     Arkansas       Red    B    500     Valid
10        Ohio    Yellow    X    100   Invalid
11  California      Blue    C    100     Valid

如果只需要至少一个正值:

df['Validated'] = np.where(m2, 'Valid', 'Invalid')

输出量:

State ColorName Code  Value Validated
0      Arizona    Yellow    A     50     Valid
1      Alabama    Orange    A    150     Valid
2     Arkansas       Red    B   -500     Valid
3      Kentuky     Green    M    -40   Invalid
4         Ohio      Blue    X    100     Valid
5      Alabama    Orange    A    -30     Valid
6      Arizona    Yellow    A    100     Valid
7   California      Blue    C    100     Valid
8   California      Blue    C   -100     Valid
9     Arkansas       Red    B    500     Valid
10        Ohio    Yellow    X    100     Valid
11  California      Blue    C    100     Valid

相关问题