首页 > 解决方案 > Pandas:自定义分组功能

问题描述

我正在寻找一个自定义分组函数,该函数将以如下方式对行进行分组:

一个让事情更清楚的例子:

start_df = pd.DataFrame({"id": [1,1,2,2,3,3,4,4,4,5],
                         "foo": [4, 4, np.nan, 7, np.nan, np.nan, 0, 9, 9, 7],
                         "bar": [np.nan, np.nan, 0, 4, 0, 1, 6, 6, 0, 4]})

    id  foo  bar
0   1   4.0  NaN
1   1   4.0  NaN
2   2   NaN  0.0
3   2   7.0  4.0
4   3   NaN  0.0
5   3   NaN  1.0
6   4   0.0  6.0
7   4   9.0  6.0
8   4   9.0  0.0
9   5   7.0  4.0

在自定义 group-by 之后id

result_df = pd.DataFrame({"id": [1,2,3,4,5], "foo": [4, 7, np.nan, 9, 7], "bar": [np.nan, 4, 1, 6, 4]})


    id  foo  bar
0   1   4.0  NaN
1   2   7.0  4.0
2   3   NaN  1.0
3   4   9.0  6.0
4   5   7.0  4.0

我知道的一种解决方案是:

start_df.groupby("id").max().reset_index()

但这对我来说太慢了,因为我正在处理的数据框很大。另一方面,我无法使用此解决方案涵盖两个元素都是数字的极端情况:

start_df.groupby("id").sum(min_count=1).reset_index()

期待您的帮助!

标签: pythonpandasgroup-by

解决方案


也许不是你想的那样,但这应该有效

start_df.groupby('id').max()

如果reset_index您想将“id”带回列中,请使用。


推荐阅读