【发布时间】:2019-12-01 09:52:44
【问题描述】:
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 对象中的第一组做“工作”。我错过了什么,所以它为所有组执行此操作并将子集“粘合”在一起?
函数 delete_rows 根据 Laurens Koppenol 提供的逻辑编辑
【问题讨论】:
-
为什么不总是返回
group[pos_min_notna:]?哪个是没有丢失的第一行,可能是组中的第一行(iloc 0) -
你说的完全正确,我确实应该这样做。因此,该功能可以简化为您的逻辑。但是,这样做后,它仍然只返回 DataFrameGroupBy 中第一组的数据。有什么建议吗?我显然在这里遗漏了一些东西,但找不到它
-
不确定为什么它只适用于第一组,但如果您要求替代解决方案,您应该提供一个数据集。否则我们很难测试任何解决方案。
-
@Valentino 提供的答案有效。问题在于没有使用
.loc。
标签: python pandas dataframe subset slice