gpt4 book ai didi

Python Pandas : Eliminate a row from a dataframe if a value in a any preceding row in a groupby meets a certain criteria

转载 作者:行者123 更新时间:2023-12-01 04:58:07 25 4
gpt4 key购买 nike

一旦周变得不连续超过 1,我就会尝试从 groupby 中删除数据。即,如果一周内有间隙,那么我想删除该 group by 中的该行和后续行。下面是我拥有的数据结构的简单示例,也是我正在寻找的理想输出。数据需要按国家/地区和产品分组。

import pandas as pd

data = {'Country' : ['US','US','US','US','US','DE','DE','DE','DE','DE'],'Product' : ['Coke','Coke','Coke','Coke','Coke','Apple','Apple','Apple','Apple','Apple'],'Week' : [1,2,3,4,6,1,2,3,5,6] }

df = pd.DataFrame(data)

print df

#Current starting Dataframe.
Country Product Week
0 US Coke 1
1 US Coke 2
2 US Coke 3
3 US Coke 4
4 US Coke 6
5 DE Apple 1
6 DE Apple 2
7 DE Apple 3
8 DE Apple 5
9 DE Apple 6

#Ideal Output below:
Country Product Week
0 US Coke 1
1 US Coke 2
2 US Coke 3
3 US Coke 4
5 DE Apple 1
6 DE Apple 2
7 DE Apple 3

因此输出删除了美国可口可乐的第 6 周,因为前一周是第 4 周。对于 DE Apple 第 5 周和第 6 周已被删除,因为前一周到第 5 周为 3。请注意,这也消除了 DE Apple 第 6 周,即使其前一周为 5 或 diff() 为 1。

最佳答案

这应该有效

df.groupby(['Country', 'Product']).apply(lambda sdf: sdf[(sdf.Week.diff(1).fillna(1) != 1).astype('int').cumsum() == 0]).reset_index(drop=True)

另一种方法,可能更具可读性(即生成一组连续的周并对照观察到的周进行检查)

df['expected_week'] = df.groupby(['Country', 'Product']).Week.transform(lambda s: range(s.min(), s.min() + s.size))
df[df.Week == df.expected_week]

关于Python Pandas : Eliminate a row from a dataframe if a value in a any preceding row in a groupby meets a certain criteria,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26911426/

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