gpt4 book ai didi

python - 基于旧的 groupby 创建新的 DataFrame

转载 作者:行者123 更新时间:2023-12-01 00:28:02 27 4
gpt4 key购买 nike

我发布了this question昨天关于在 df 中创建一个新专栏。现在我很好奇如何制作一个仅包含极端元素的新数据框。例如:

df = pd.DataFrame({'Event':['A','A','A','A', 'A' ,'B','B','B','B','B'],  'Number':[1,2,3,4,5,6,7,8,9,10],'Ref':[False,False,False,False,True,False,False,False,True,False]})
df["new"] = df.Number - df.Number[df.groupby('Event')['Ref'].transform('idxmax')].reset_index(drop=True)
print(df)

这给出了表 1 中的 df。现在我很好奇如何创建一个新的 df1,它只是与 new 的最大绝对值相对应的行。输出将是下面的 Output2。我知道我可以利用类似 df1 = df.loc([df['new'].idxmin()) 的东西但这只给出行。我不确定如何循环不同的组以及如何应用 numpy 函数。我知道这是一个单行,但我不太确定如何处理

输出1:

  Event  Number    Ref  new
0 A 1 False -4
1 A 2 False -3
2 A 3 False -2
3 A 4 False -1
4 A 5 True 0
5 B 6 False -3
6 B 7 False -2
7 B 8 False -1
8 B 9 True 0
9 B 10 False 1

输出2:

  Event  Number    Ref  new
0 A 1 False -4
1 B 6 False -3

最佳答案

让我尝试通过合并来回答您的扩展问题

new_df = pd.merge(df.loc[df['new'].abs().groupby(df['Event']).idxmax()],
df.loc[df['Ref'], ['Event','Number']],
on='Event',
suffixes=['','_ref']
)

输出:

  Event  Number    Ref  new  Number_ref
0 A 1 False -4 5
1 B 6 False -3 9

关于python - 基于旧的 groupby 创建新的 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58399257/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com