grouopby.apply 函数没有产生正确的结果
grouopby.apply function isnt producing correct result
我有一个按帐户、姓名和日期分组的数据集。并创建一个函数以仅保留每个唯一组合的 'alt_fee' 的最小值。
def drop(df):
return df[df['alt_fee']==df['alt_fee'].min()]
result = df.groupby(['account', 'name', 'date']).apply(drop)
这给了我比需要更多的行。对于每个唯一的帐户、名称和日期组合,我可以看到多个条目。我不确定为什么。
在它生成的数据框中,索引、帐户、名称和日期中的列。有一些是相同的。但我看到数字索引不同。也许有一种方法可以在分组前删除索引。
我注意到当我将这段代码放入函数中时:
def drop(df):
return df['alt_fee'].min()
它返回我想要的特定行。但是后来我不知道如何取回数据帧的其余部分。
您完全可以不使用 apply()
来完成此操作。使用groupby
函数时,每个组合只会返回一条记录。通过使用 min()
作为聚合器,将返回数据中所有其他数字字段的最小值。
result = df.groupby(['account', 'name', 'date']).min()
处理评论
您可以只取上面代码中的 alt_fee
列,然后将其与原始数据集合并。
result = df.groupby(['account', 'name', 'date']).min()[['alt_fee']].reset_index()
result = result.merge(df, on=['account', 'name', 'date', 'alt_fee'])
注意:如果有多行具有相同的alt_fee
,您需要删除重复项
result = result.drop_duplicates(['account', 'name', 'date', 'alt_fee'], keep='first')` to remove those values.
刚收到。这是代码,以防其他人卡在这里。
def drop(df):
return df[df['alt_fee'] == df['alt_fee'].min()].drop_duplicates(subset=(['account', 'name','date']),keep='first')
我有一个按帐户、姓名和日期分组的数据集。并创建一个函数以仅保留每个唯一组合的 'alt_fee' 的最小值。
def drop(df):
return df[df['alt_fee']==df['alt_fee'].min()]
result = df.groupby(['account', 'name', 'date']).apply(drop)
这给了我比需要更多的行。对于每个唯一的帐户、名称和日期组合,我可以看到多个条目。我不确定为什么。 在它生成的数据框中,索引、帐户、名称和日期中的列。有一些是相同的。但我看到数字索引不同。也许有一种方法可以在分组前删除索引。
我注意到当我将这段代码放入函数中时:
def drop(df):
return df['alt_fee'].min()
它返回我想要的特定行。但是后来我不知道如何取回数据帧的其余部分。
您完全可以不使用 apply()
来完成此操作。使用groupby
函数时,每个组合只会返回一条记录。通过使用 min()
作为聚合器,将返回数据中所有其他数字字段的最小值。
result = df.groupby(['account', 'name', 'date']).min()
处理评论
您可以只取上面代码中的 alt_fee
列,然后将其与原始数据集合并。
result = df.groupby(['account', 'name', 'date']).min()[['alt_fee']].reset_index()
result = result.merge(df, on=['account', 'name', 'date', 'alt_fee'])
注意:如果有多行具有相同的alt_fee
,您需要删除重复项
result = result.drop_duplicates(['account', 'name', 'date', 'alt_fee'], keep='first')` to remove those values.
刚收到。这是代码,以防其他人卡在这里。
def drop(df):
return df[df['alt_fee'] == df['alt_fee'].min()].drop_duplicates(subset=(['account', 'name','date']),keep='first')