gpt4 book ai didi

python - 如何将 groupby.first() 与转换函数一起使用

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

我想使用 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() 函数将不起作用。为什么不?任何帮助将不胜感激!

最佳答案

在您的 lambda 中,您正在尝试使用 Series.first ,这仅对具有 DatetimeIndex 的 Series 有意义。

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

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

关于python - 如何将 groupby.first() 与转换函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57617994/

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