如果满足条件,如何将 pandas 数据框中的值设置为组的最小值

问题描述 投票:0回答:1

这是一些示例数据:

lst = [['PF2', 'E1', -500, -127, 199971, 200164, True, True], 
       ['PR2', 'E1', -500, -167, 199655, 200124, True, True],
       ['PF2', 'E1', -500, -167, 199645, 200124, False, True],
       ['PF2', 'E1', -400, -127, 199971, 200564, True, True], 
       ['PR2', 'E1', -400, -167, 199155, 200324, True, True]]

df = pd.DataFrame(lst, columns=["Name", "Part", "Rel_s", 
                                        "Rel_e", "Abs_s", "Abs_e",
                                        "Quality_Start", "Quality_End"])

我想修改此数据框,以将

Abs_s
Part
的每个组合的
Rel_s
的值更改为最小值(对于
Abs_e
Part
Rel_e
的组合也是如此) 具有最大的值)。这部分与此代码配合良好:

df['Abs_s'] = df.groupby(["Part", "Rel_s"])['Abs_s'].transform('min')

df['Abs_e'] = df.groupby(["Part", "Rel_e"])['Abs_e'].transform('max')

我喜欢这个解决方案,因为它看起来简单且易于理解;但是,我还想考虑质量值,以便在

Quality_Start
(或
Quality_End
)为
True
时取最小值(或最大值)。因此,在本例中,对于
E1
-500
,正确的
Abs_s
值应该是
199655
而不是
199645

我可以添加这些条件吗?我还能如何进行这种转变?

python pandas dataframe
1个回答
0
投票

用途:

df['Abs_s'] = df.assign(Abs_s=df['Abs_s'].where(df['Quality_Start'])).groupby(["Part", "Rel_s"])['Abs_s'].transform('min')

df['Abs_e'] = df.assign(Abs_e=df['Abs_e'].where(df['Quality_End'])).groupby(["Part", "Rel_e"])['Abs_e'].transform('max')
© www.soinside.com 2019 - 2024. All rights reserved.