首页 > 解决方案 > 如何将 groupby.first() 与变换函数一起使用

问题描述

我想使用 groupby.first() 函数来查找组的第一个非空值并将该值转换为组中的每一行。

我尝试了以下代码:

import pandas as pd
import numpy as np
raw_data = {'col1': ['a','a','a','b','b','b','b','b','b','c','c','c','c','c'],
            'col2': [np.nan,np.nan,6,0,2,0,8,2,2,3,0,0,4,5]}
df=pd.DataFrame(raw_data)
df['col3'] = df.groupby('col1')['col2'].transform(lambda x: x.first())
df

我想得到一个看起来像这样的df:

  col1 col2 col3
    a NaN   6
    a NaN   6
    a 6     6
    b 0     0
    b 2     0
    b 0     0
    b 8     0
    b 2     0
    b 2     0
    c 3     3
    c 0     3
    c 0     3
    c 4     3
    c 5     3

我收到以下错误:TypeError: first() missing 1 required positional argument: 'offset'

有趣的是,如果我运行相同的代码并将 first() 换成 sum(),那么它会返回该组每一行的每个组的总和。first() 函数将不起作用。为什么不?任何帮助将不胜感激!

标签: pythonpandas

解决方案


与您lambda一起尝试使用Series.first,这仅对具有 DatetimeIndex 的系列有意义。

您想要GroupBy.first的,可以使用命名别名访问'first'

df['col3'] = df.groupby('col1')['col2'].transform('first')

推荐阅读