这是一些示例数据:
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
。
我可以添加这些条件吗?我还能如何进行这种转变?
用途:
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')