gpt4 book ai didi

python - 使用 Pandas 石斑鱼时如何取系列的最大值?

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:56 24 4
gpt4 key购买 nike

我有以下数据框:

U_ID     Group   Location  Hours  People  Date
149 17 USA 2 2 2014-11-03
149 17 USA 2 1 2014-11-07
149 21 USA 3 2 2014-12-21
149 18 UK 1.5 1 2014-11-14
149 19 Spain 2 4 2014-11-21

我可以使用以下代码片段汇总小时数:

def process_hours(hr_df):
hr_df['Date'] = pd.to_datetime(hr_df['Date'])
hr_df['Hours'] = pd.to_numeric(hr_df['Hours'])
hr_df = (vol_df.groupby(['U_ID', 'Group', 'Location', 'People', pd.Grouper(key='Date', freq='MS')])['Hours'].sum().reset_index(level=[0, 1, 2, 3]))

然而,当人数不同时,这会 split :

           U_ID Group Location People  Hours
Date
2014-11-01 149 17 USA 1 2.0
2014-11-01 149 17 USA 2 2.0
2014-11-01 149 18 UK 1 1.5
2014-11-01 149 19 Spain 4 2.0
2014-12-01 149 21 USA 2 3.0

当分组恰好出现这种情况时,如何取最大人数:

           U_ID Group Location People  Hours
Date
2014-11-01 149 17 USA 2 4.0
2014-11-01 149 18 UK 1 1.5
2014-11-01 149 19 Spain 4 2.0
2014-12-01 149 21 USA 2 3.0

最佳答案

从 grouper 中删除“People”并使用 agg 指定 groupby 以额外获取 max 的人。

(hr_df.groupby(['U_ID', 'Group', 'Location', pd.Grouper(key='Date', freq='MS')])
.agg({'Hours' : 'sum', 'People' : 'max'})
.reset_index() # Don't hardcode levels here.
.set_index('Date'))

U_ID Group Location Hours People
Date
2014-11-01 149 17 USA 4.0 2
2014-11-01 149 18 UK 1.5 1
2014-11-01 149 19 Spain 2.0 4
2014-12-01 149 21 USA 3.0 2

我在这里不建议对级别进行硬编码的原因是为了更好的可维护性。使用 reset_index(level=[0, 1, 2])reset_index + set_index 性能更高。但是,例如,如果您决定向石斑鱼添加另一列,则需要修改重置索引调用……这很好而且很花哨。如果您想要更易于维护的代码,请考虑不要对它们进行硬编码。

关于python - 使用 Pandas 石斑鱼时如何取系列的最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51920827/

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