我有pandas数据框,其中的列为X, Y, Z
。我需要为maximum
的每个值获取Z
中的X
,并且还需要保留列Y
的对应值。
我尝试了以下代码:
s_pts = inv_trans_df.groupby(['X', 'Y'])['Z'].max()
运行此代码时,我得到的输出是
我希望与此类似:
0.62933 | 0.68162 | 0.27078
0.62938 | 0.68136 | 0.26827
答案 0 :(得分:0)
您可以通过以下方式为每个X具有最大Z值的行建立索引:
idx = inv_trans_df.groupby(['X'])['Z'].transform(max) == inv_trans_df['Z']
然后,该索引将为您提供给定X的最大Z值的每一行,您可以选择Y或从此处进行任何操作。
inv_trans_df[idx]
请注意,这将保留所有重复项-如果X值的最大Z值出现一次以上,则所有匹配的最大值将出现在结果中。您如何处理此问题取决于您的实际目标。
答案 1 :(得分:0)
您可以按值排序,然后按索引系列的第一个删除重复项:
df = pd.DataFrame({'col1': list('ABAB'*3),
'col2': list('XYYX'*3),
'col3': list(range(12))})
res = df.sort_values('col3', ascending=False)\
.drop_duplicates('col1')
print(res)
col1 col2 col3
11 B X 11
10 A Y 10