gpt4 book ai didi

python - Pandas 更有效地过滤包含空字段的组?

转载 作者:行者123 更新时间:2023-11-28 22:27:00 25 4
gpt4 key购买 nike

我目前正在尝试过滤掉 pandas 中包含空字段的组。我通过遍历所有组来做到这一点。

for _, g in df.groupby(['name', 'group']):
if not (g['val'].isnull()).any()
#Do more stuff with group, as none of its records are null

然而,这是非常低效的,并且已经成为我的代码的核心瓶颈。有没有什么方法可以表示这种行为而不需要遍历每个组,这个数据框非常大。

编辑:

这种行为不会通过简单地删除 groupby 之前的空记录来实现。 groupby 用于区分什么是可接受的组。如果您事先删除所有空记录,那么所有组都会通过,这是不希望的。

基本上我正在尝试解决这个问题,对于每个组,确保它不包含空记录,如果它丢弃整个组,而不仅仅是记录本身

编辑 2:

这是一个更具体的示例,假设它的大小不影响性能。

import pandas
import numpy

df = pandas.DataFrame([{'name': 'alpha', 'group': 1, 'val': 100}, {'name': 'alpha', 'group': 1, 'val': numpy.nan},
{'name': 'alpha', 'group': 1, 'val': 50}, {'name': 'beta', 'group': 1, 'val': 20}, {'name': 'beta', 'group': 1, 'val': 40},
{'name': 'beta', 'group': 2, 'val': numpy.nan}, {'name': 'beta', 'group': 2, 'val': 120}])
print df

group name val
0 1 alpha 100.0
1 1 alpha NaN
2 1 alpha 50.0
3 1 beta 20.0
4 1 beta 40.0
5 2 beta NaN
6 2 beta 120.0

for _, g in df.groupby(['name', 'group']):
if not (g['val'].isnull()).any():
print g

group name val
3 1 beta 20.0
4 1 beta 40.0

最佳答案

filter within the groupby context 采用一个 callable 返回一个 bool 来确定该组是否被包含。我会这样做:

# Truth values across whole grouped dataframe on what pandas thinks is null
# \ ______
# / \
df.groupby(['name', 'group']).filter(lambda df: df.notnull().values.all())
# \________/
# /
# Letting numpy determine if everything in the 2-D array is True

关于python - Pandas 更有效地过滤包含空字段的组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44333684/

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