gpt4 book ai didi

python - 在 DataFrameGroupBy 对象的组内进行切片

转载 作者:行者123 更新时间:2023-11-30 21:55:12 24 4
gpt4 key购买 nike

Python版本:3.7.3

有人问过类似的问题here ,但并不完全相同。

根据条件,我想仅检索 DataFrameGroupBy 对象每组的子集。基本上,如果 DataFrame 以仅包含 NAN 的行开头,我想删除它们。如果不是这种情况,我希望整个 DataFrame 保持完整。为了实现这一点,我编写了一个函数 delete_rows

Grouped_object = df.groupby(['col1', 'col2']) 

def delete_rows(group):
pos_min_notna = group[group['cumsum'].notna()].index[0]
return group[pos_min_notna:]

new_df = Grouped_object.apply(delete_rows)

但是,此函数似乎只为 DataFrameGroupBy 对象中的第一组完成“工作”。我缺少什么,所以它对所有组执行此操作并将子集“粘合”在一起?

根据 Laurens Koppenol 提供的逻辑编辑的函数 delete_rows

最佳答案

在 Pandas 中,您必须非常小心索引 (loc) 和索引位置 (iloc)。明确这一点总是一个好主意。

This answer对差异有一个很好的概述

Grouped_object = df.groupby(['col1', 'col2']) 

def delete_rows(group):
pos_min_notna = group[group['cumsum'].notna()].index[0] # returns value of the index = loc
return group.loc[pos_min_notna:] # make loc explicit

new_df = Grouped_object.apply(delete_rows) # this dataframe has a messed up index :)

最小示例显示不需要的行为

df = pd.DataFrame([[1,2,3], [2,4,6], [2,4,6]], columns=['a', 'b', 'c'])

# Drop the first row of every group
df.groupby('a').apply(lambda g: g.iloc[1:])

# Identical results as:
df.groupby('a').apply(lambda g: g[1:])

# Return anything from any group with index 1 or higher
# This is nonsense with a static index in a sorted df. But examples huh
df.groupby('a').apply(lambda g: g.loc[1:])


关于python - 在 DataFrameGroupBy 对象的组内进行切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57162658/

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