我想使用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()缺少1个必需的位置参数:“ offset”
有趣的是,如果我运行相同的代码,只是将first()换成sum(),那么它将返回该组每一行的每个组的总和。 first()函数将不起作用。为什么不?任何帮助将不胜感激!答案 0 :(得分:3)
在您的lambda
中,您尝试使用Series.first
,这仅对具有DatetimeIndex的系列有意义。
您需要GroupBy.first
,可以使用别名'first'
进行访问。
df['col3'] = df.groupby('col1')['col2'].transform('first')