gpt4 book ai didi

python - 从 pandas groupby 对象返回每个组的子集

转载 作者:行者123 更新时间:2023-11-30 23:04:52 26 4
gpt4 key购买 nike

我有如下所示的多级数据框:

                      date_time      name  note   value
list index
1 0 2015-05-22 05:37:59 Tom 129 False
1 2015-05-22 05:38:59 Tom 0 True
2 2015-05-22 05:39:59 Tom 0 False
3 2015-05-22 05:40:59 Tom 45 True
2 4 2015-05-22 05:37:59 Kate 129 True
5 2015-05-22 05:41:59 Kate 0 False
5 2015-05-22 05:37:59 Kate 0 True

我想迭代 list ,并为 list 的每个第一行检查列 value 的值,如果它是 False,删除这一行。因此,最终目标是删除 listvalue 中具有 False 的所有前行我使用这段代码,这似乎符合逻辑:

def delete_first_false():
for list, new_df in df.groupby(level=0):
for index, row in new_df.iterrows():
new_df=new_df.groupby('name').first().loc([new_df['value']!='False'])
return new_df
return df

但我有这个错误

AttributeError: '_LocIndexer' object has no attribute 'groupby'

你能解释一下我的方法有什么问题吗?

最佳答案

您的一般方法(使用循环)很少能在 pandas 中按照您想要的方式工作。

如果您有 groupby 对象,则应使用 applyaggfilter转换方法。根据您的情况,apply 是合适的。

您的主要目标如下:

So the final goal is to delete all the first rows in (each group defined by ) list that have False in (the) value (column).

因此,让我们编写一个简单的函数来在单个独立的数据帧上执行此操作:

def filter_firstrow_falses(df):
if not df['value'].iloc[0]:
return df.iloc[1:]
else:
return df

好的。足够简单。

现在,让我们将其应用到真实数据帧的每组:

import pandas
from io import StringIO

csv = StringIO("""\
list,date_time,name,note,value
1,2015-05-22 05:37:59,Tom,129,False
1,2015-05-22 05:38:59,Tom,0,True
1,2015-05-22 05:39:59,Tom,0,False
1,2015-05-22 05:40:59,Tom,45,True
2,2015-05-22 05:37:59,Kate,129,True
2,2015-05-22 05:41:59,Kate,0,False
2,2015-05-22 05:37:59,Kate,0,True
""")

df = pandas.read_csv(csv)

final = (
df.groupby(by=['list']) # create the groupby object
.apply(filter_firstrow_falses) # apply our function to each group
.reset_index(drop=True) # clean up the index
)
print(final)


list date_time name note value
0 1 2015-05-22 05:38:59 Tom 0 True
1 1 2015-05-22 05:39:59 Tom 0 False
2 1 2015-05-22 05:40:59 Tom 45 True
3 2 2015-05-22 05:37:59 Kate 129 True
4 2 2015-05-22 05:41:59 Kate 0 False
5 2 2015-05-22 05:37:59 Kate 0 True

关于python - 从 pandas groupby 对象返回每个组的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33505339/

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